问题遇到的现象和发生背景
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
学习JavaWeb遇到了一些问题,怀疑是和JDBC相关的
问题描述:我根据BaseDAO写了两个实现类的代码,通过BaseDAO传入的可变参数填充占位符,但是有一个可以实现查询,有一个只能查询到空值,通过调试,我发现两段代码都能正确的预编译SQL语句,但是其中一个查询的结果集总是为空的
希望各位好兄弟能指点一二
这边是我BaseDAO的代码
//有事务版本的通用的返回多个对象查询方法
public List<T> getForList(Connection connection, String sql, Object ...args){
//Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//connection = JDBCutil.getConnection();
preparedStatement = connection.prepareStatement(sql);
//填充占位符
for (int i = 0;i < args.length;i++){
preparedStatement.setObject(i+1,args[i]);
}
//返回结果集
resultSet = preparedStatement.executeQuery();
//获取结果集元数据
ResultSetMetaData metaData = resultSet.getMetaData();
//获取结果集当前里面的列数
int columnCount = metaData.getColumnCount();
ArrayList<T> list = new ArrayList<>();
while (resultSet.next()){
T t = (T) clazz.newInstance();
//处理这一行数据的每一列
for(int i = 0;i < columnCount;i++){
//获取这列的数值
Object object = resultSet.getObject(i + 1);
//获取这列的名字(数据库表中)
//String columnName = metaData.getColumnName(i + 1);
String columnLabel = metaData.getColumnLabel(i + 1);
//调用方法,通过列名查询到该字段,并且返回一个filed对象
Field declaredField = t.getClass().getDeclaredField(columnLabel);
//提高反射权限
declaredField.setAccessible(true);
//给当前根据列名字查询到的filed对象赋值
declaredField.set(t,object);
}
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭资源
//JDBCutil.closeResource(connection,preparedStatement,resultSet);
JDBCutil.closeResource(null,preparedStatement,resultSet);
}
return null;
}
这边是我实现类查询为空的代码
@Override
public List<Fruit> getByNewPage(Connection connection, String keyword, int pageNo) {
String sql = "select id,name,price,count,remark from fruit where name = ? or remark = ? limit ?, 5";
List<Fruit> forList = getForList(connection, sql, keyword,keyword,(pageNo-1)*5);
return forList;
}
这边是我实现类可以查询到数据的代码
@Override
public List<Fruit> getByPage(Connection connection, int pageNo) {
String sql = "select id,name,price,count,remark from fruit limit ?, 5";
List<Fruit> forList = getForList(connection, sql, (pageNo-1)*5);
return forList;
}