[英]JDBC Null pointer Exception thrown
嗨,我在rs.next()或rs.getString(1)上得到nullpointerexception,這確實很奇怪,有時rs.next()可以正常工作,並且在rs.getString(“ PRODUCTCODE”)上拋出nullpointerexception,有時它會拋出npe在rs.getString(“ PRODDATE”)上,我不明白為什么rs.getString()會引發npe,而rs.next()可以正常工作
這是我的代碼
{
ResultSet rs = null;
String query = "";
BarcodeBean bi = null;
try {
query = "SELECT * FROM TABLE(GET_BARCODEINFO('"barcode.trim()"'))";
statement = connection.createStatement();
Logger.getInstance().getLogger().logInfo(query);
rs = statement.executeQuery(query);
bi = new BarcodeBean();
if (rs == null){
if(rs.next()){
bi.setUrunKodu(rs.getString("PRODUCTCODE"));
bi.setImalatMakineKodu(rs.getString("PRODMACHINECODE"));
bi.setOperatorSicilNo(rs.getString("OPERATORID"));
bi.setImalatTarihi(rs.getString("PRODDATE"));
bi.setImalatVardiyasi(rs.getString("PRODSHIFT"));
bi.setSeriNumarasi(rs.getString("SERIALNUMBER"));
bi.setSirtTarihi(rs.getString("SIRTTARIHI"));
}
}
} catch (SQLException e) {
e.printStackTrace();
throw e;
} catch (Exception e) {
e.printStackTrace();
} finally {
DatabaseUtility.close(rs);
DatabaseUtility.close(statement);
}
}
可能您想要:
if (rs != null) {
if (rs.next()) {
甚至更好:
if (rs != null && rs.next()) {
您的測試完全是錯誤的。
Statement#executeQuery()
從不返回null
。 整個nullcheck是多余的 。 普通用語如下:
public Entity find(Long id) throws SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Entity entity = null;
try {
connection = database.getConnection();
preparedStatement = connection.prepareStatement(SQL_FIND);
preparedStatement.setLong(1, id);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
entity = new Entity();
entity.setId(resultSet.getLong("id"));
entity.setName(resultSet.getString("name"));
// ...
}
} finally {
close(connection, preparedStatement, resultSet); // In reversed order.
}
return entity;
}
您的實際問題出在其他地方。 顯然,這是對堆棧跟蹤的誤解。 為了正確定位,您需要在stacktrace中查找第一行的行號,然后將確切的代碼指向該行號。
從語句javadocs :
公共ResultSet executeQuery(String sql)引發SQLException
返回 :一個ResultSet對象,其中包含給定查詢產生的數據; 永不為空
因此,您無需驗證rs == null
。
處理結果集行的標准方法是:
while (rs.next ()) {
doSmth (rs);
}
您對if條件做出了錯誤的注釋,
因此將其更改為if(rs!= null){...... .......}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.