问题:
//操作数据库的公共类
public class BaseDao {
...
/*编写查询公共类*/
public static ResultSet execute(Connection con,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws SQLException {
preparedStatement = con.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject(i+1,params[i]);
}
resultSet = preparedStatement.executeQuery();
return resultSet;
}
...
}
public class UserDaoImpl implements UserDao{
//根据用户名或角色查询用户总数
@Override
public int getUserCount(Connection connection, String userName, int userRole) throws SQLException {
PreparedStatement pstm = null;
ResultSet rs = null;
int count = 0;
if(connection != null){
StringBuffer sql = new StringBuffer();
sql.append("select count(1) as count from smbms_user u,smbms_role r where u.userRole = r.id ");
//用来传参数
List<Object> list = new ArrayList<>();
if(!StringUtils.isNullOrEmpty(userName)){
sql.append("and u.userName like ? ");
list.add("%"+userName+"%");
}
if(userRole > 0){
sql.append("and u.userRole=?");
list.add(userRole);
}
//输出完整sql
System.out.println("sql:" + sql.toString());
rs = BaseDao.execute(connection,pstm,rs,sql.toString(),list.toArray());
if(rs.next()){
count = rs.getInt("count");
}
BaseDao.closeSourse(null,pstm,rs);
}
return count;
}
}
在BaseDao.execute(Connection con,PreparedStatement pstm,ResultSet rs,String sql,Object[] params)
中参数rs在最后已经被赋值了,那调用这个方法的方法中的rs应该也赋好了值,为何在UserDaoImpl中还需要写
rs = BaseDao.execute(connection,pstm,rs,sql.toString(),list.toArray());
,用返回值对rs进行赋值,而不是在调用BaseDao.execute
已经赋好了。
如果不用返回值对rs进行赋值,那后面的rs.next()就会报错。
解答:
待解答。。。
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/270341.html