错误日志
java.sql.SQLException: No value specified for parameter 1
at com.kuang.dao.BaseDao.execute(BaseDao.java:56)
at com.kuang.dao.user.UserDaoImpl.getLoginUser(UserDaoImpl.java:23)
at com.kuang.service.user.UserServiceImpl.login(UserServiceImpl.java:27)
at com.kuang.service.user.UserServiceImpl.test(UserServiceImpl.java:39)
java.lang.NullPointerException
at com.kuang.service.user.UserServiceImpl.test(UserServiceImpl.java:40)
错误代码
//编写查询公共类
public static ResultSet execute(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet, String sql, Object[] params) throws SQLException {
//预编译的sql,在后面直接执行就可以了
preparedStatement = connection.prepareStatement(sql);
for (int i = 1; i < params.length; i++) {
//setObject,占位符从1开始,但是我们的数组是从0开始的
preparedStatement.setObject(i+1, params[i]);
}
resultSet = preparedStatement.executeQuery();
return resultSet;
}
错误原因
- 占位符从1开始,数组从0开始的
- 但是上面的代码中,实际上占位符从2开始,数组从1开始
解决
改变传入的参数即可
正确代码
for (int i = 0; i < params.length; i++) {
//setObject,占位符从1开始,但是我们的数组是从0开始的
preparedStatement.setObject(i+1, params[i]);
}