封装数据通用的查询方法(多行查询 单行查询 ) 以及调用时候需要注意的事项
Posted 因为你,我爱上了那抹蓝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装数据通用的查询方法(多行查询 单行查询 ) 以及调用时候需要注意的事项相关的知识,希望对你有一定的参考价值。
/** * * @param sql 查询语句 * @param params 占位符对应的值 * @param handler 结果集一行的处理对象 * @return 处理后的对象的集合 * @throws SQLException */ //封装一个通用的多行查询方法 public static <T> List<T> query(String sql,Object [] params,ResultSetHandler<T> handler) throws SQLException{ //注册驱动,与数据库建立链接 Connection conn = ConnectionFactory.getConnection(); //创建可执行的sql语句 PreparedStatement pstmt = conn.prepareStatement(sql); //执行sql语句 先设置占位符 if(params!=null&¶ms.length>0){ //遍历传进来的占位符数字组 for (int i = 0; i < params.length; i++) { pstmt.setObject(i + 1, params[i]); } } ResultSet rs = pstmt.executeQuery(); //处理结果集 ArrayList<T> list = new ArrayList<>(); if(handler!=null){ while(rs.next()){ //每次处理一行 T obj = handler.handleRow(rs); //将处理的结果添加到List集合中 list.add(obj); } } ConnectionFactory.close(rs,pstmt, conn); return list; }
写一个查询数据库中所有用户信息,调用封装的查询方法
public class UserDaoImpl implements IUserDao{ //登录 public User queryUser(String username, String password) throws SQLException { //调用封装的方法查询单个用户 String sql = "SELECT id,username,password,sex,addr,tel,id_Number FROM t_user WHERE username=? AND password=?"; //object [] {参数1,参数2}需要和sql中设置的占位符的值一一对应 return JDBCTemplate.queryOne(sql, new Object[] {username,password}, new ResultSetHandler<User>() { @Override public User handleRow(ResultSet rs) throws SQLException { return new User( rs.getLong(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getString(6), rs.getString(7)); } }); }
以上是关于封装数据通用的查询方法(多行查询 单行查询 ) 以及调用时候需要注意的事项的主要内容,如果未能解决你的问题,请参考以下文章
嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏