QueryRunner实现数据查询:public <T> T query(String sql,ResultSetHandler<T> rsh,Object... params)throws SQLException;
1.古老查询:
示例代码:
2.QueryRunner.query()查询:
示例代码:
1.古老查询:
示例代码:
public void query1(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
ComboPooledDataSource pool=new ComboPooledDataSource();
List<Account> list=new ArrayList<Account>();
try{
conn=pool.getConnection();
ps=conn.prepareStatement("select * from account where money>?");
ps.setInt(1, 100);
rs=ps.executeQuery();
while(rs.next()){
Account account=new Account();
account.setId(rs.getInt("id"));
account.setMoney(rs.getInt("money"));
account.setName(rs.getString("name"));
list.add(account);
}
System.out.println(list);
}catch(Exception e){
e.printStackTrace();
}finally{
DbUtils.closeQuietly(conn, ps, rs);
}
}
2.QueryRunner.query()查询:
示例代码:
public void query2() throws SQLException{
QueryRunner runner=new QueryRunner(new ComboPooledDataSource());
List<Account> list=runner.query("select * from account where money>?", new ResultSetHandler<List<Account>>(){
public List<Account> handle(ResultSet rs) throws SQLException {//回掉函数,处理结果集数据
List<Account> list=new ArrayList<Account>();
while(rs.next()){
Account account=new Account();
account.setId(rs.getInt("id"));
account.setMoney(rs.getInt("money"));
account.setName(rs.getString("name"));
list.add(account);
}
return list;
}
},999 );//第三个参数为可变参数,可以有多个参数
System.out.println(list);
}
3.自己在MyQueryRunner类中定义query()方法:(MyQueryRunner见前一篇文章)
方法代码为:
public <T> T query(String sql,ResultSetHandler<T> handler,Object ...objs) throws Exception{
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = source.getConnection();
ps = conn.prepareStatement(sql);
//--利用参数元数据设置参数
ParameterMetaData metaData = ps.getParameterMetaData();
int count = metaData.getParameterCount();
for(int i = 1;i<=count;i++){
ps.setObject(i, objs[i-1]);
}
rs = ps.executeQuery();
//--框架中不知道怎么处理结果集,回调用户传入的结果集处理逻辑,处理结果集
return handler.handle(rs);
}catch (Exception e) {
throw e;
} finally{
DbUtils.closeQuietly(conn, ps, rs);
}
}