博主出现此异常的情况为结果集resultSet获取结果类型与结果集里的数据类型不对应。
例如resultSet.getString(2)第二个位置的结果类型并不为String类型,却以String类型去取出,编译不会报错,而运行会报错。
补充:但是当book.setName(resultSet.getString(2));中resultSet.getString(2)类型与setName所需要的类型不相同时,能直接检测出来,编译不通过。
正确代码
结果集里的数据类型 正确顺序 为 Integer String Double String String
try {
pstm =connection.prepareStatement("select * from book where bookID=?");
pstm.setInt(1, bookId);
resultSet = pstm.executeQuery();
while (resultSet.next()) {
book.setBookId(resultSet.getInt(1));
book.setName(resultSet.getString(2));
book.setPrice(resultSet.getDouble(3));
book.setCategory(resultSet.getString(4));
book.setDescription(resultSet.getString(5));
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("查找图书失败");
}finally {
JdbcUtils.close(resultSet, pstm, connection);
}
错误代码(当!调换数字3与4后!)
while (resultSet.next()) {
book.setBookId(resultSet.getInt(1));
book.setName(resultSet.getString(2));
book.setPrice(resultSet.getDouble(4));//原本为3
book.setCategory(resultSet.getString(3));//原本为4
book.setDescription(resultSet.getString(5));
}