JDBC优化查询

本文探讨了如何使用JDBC进行查询优化,包括通过ID查询和查询全部数据的方法,强调了优化查询效率的重要性,以及调用者如何处理返回的handler和结果集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优化前
@Override  
public void findAll() {  
    Student student=null;  
    try {  
        conn=myConn.getConnection();  //这是一个工具类用于数据库的链接与关闭操作  
        String sql="select * from student;";  
        ps=conn.prepareStatement(sql);  
        rs=ps.executeQuery();  
        while(rs.next()){  
            student=new Student();  
            student.setName(rs.getString("name"));  
            student.setMath(rs.getInt("math"));  
            student.setEnglish(rs.getInt("english"));  
            System.out.println(student);  
        }  
    } catch (Exception e) {  
        e.printStackTrace();  
    }finally{  
        myConn.close(rs, ps, conn);////这是一个工具类用于数据库的链接与关闭操作  
    }  
      
}  

@Override  
public void findById(int id) {  
    try {  
        conn=myConn.getConnection();  
        String sql="select * from student where id=?;";  
        ps=conn.prepareStatement(sql);  
        ps.setInt(1, id);  
        rs=ps.executeQuery();  
        if(rs.next()){  
            Student student=new Student();  
            student.setName(rs.getString("name"));  
            student.setMath(rs.getInt("math"));  
            student.setEnglish(rs.getInt("english"));  
            System.out.println(student);  
        }  
    } catch (Exception e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }finally{  
        myConn.close(rs, ps, conn);  
    }         
      
}  

优化后

public interface ResultSetHandler {  
   public  Object doHandler(ResultSet rs) throws SQLException;  
}  
public class JdbcTem{  
   public Object query(String sql,ResultSetHandler handler,Object...args){  
     try {  
     conn=MyConnection.getConnection();//对数据库的链接操作  
     ps=conn.prepareStatement(sql);  
     if(args!=null){  
         for (int  i = 0;  i < args.length;  i++) {  
            ps.setObject(i+1,args[i]);  
        }  
     }  
      rs=ps.executeQuery();  
    return handler.doHandler(rs);  
} catch (Exception e) {  
    e.printStackTrace();  
    return null;  
}finally{  
    MyConnection.close(rs, ps, conn);//对数据库的关闭操作  
}  
   }  
   }  

上面的操作返回了一个handler的方法连同插叙的结果集一同返回给了调用者所以调用者必须要去实现具体可以用匿名内部类


通过Id查询

@Override  
public void findById(final int id) {  
 String sql="select * from student where id=?";  
Person p= (Person) jdbcTem.query(sql, new ResultSetHandler(){  
  
    @Override  
    public Object doHandler(ResultSet rs) throws SQLException {  
        Person p=null;  
        if(rs.next()){  
          p=new Person();  
          p.setEnglish(rs.getInt("english"));  
          p.setMath(rs.getInt("math"));  
          p.setName(rs.getString("name"));  
        }  
        return p;  
    }  
       
 },id);   
 System.out.println(p);  
}  

查询全部

@Override  
public void findAll() {  
    String sql="select * from student;";  
     @SuppressWarnings("unchecked")  
    List<Person>list=(List<Person>) jdbcTem.query(sql, new ResultSetHandler() {  
        @Override  
        public Object doHandler(ResultSet rs) throws SQLException {  
            List<Person>li=new ArrayList<Person>();  
            Person p=null;  
            while(rs.next()){  
                p=new Person();  
                p.setEnglish(rs.getInt("english"));  
                p.setMath(rs.getInt("math"));  
                p.setName(rs.getString("name"));  
                li.add(p);  
            }  
            return li;  
        }  
    });  
      
    for (Person person : list) {  
        System.out.println(person);  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值