簡體   English   中英

JDBC Null指針拋出異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM