Исключение пустого указателя JDBC - PullRequest
1 голос
/ 12 апреля 2010

Привет, я получаю nullpointerexception в rs.next () или rs.getString (1) действительно странно, что иногда rs.next () работает нормально и выдает nullpointerexception в rs.getString ("PRODUCTCODE"), иногда он выдает npe в rs.getString ("PRODDATE") я не понимаю, почему rs.getString () работает, а 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);

}
} 

Ответы [ 4 ]

3 голосов
/ 13 апреля 2010

Statement#executeQuery() никогда возвращает null. Вся проверка на ноль лишняя . Обычная идиома следующая:

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;
}

Ваша актуальная проблема лежит где-то еще. Это явно неверная интерпретация трассировки стека. Чтобы правильно его записать, вам нужно найти номер строки первой строки в трассировке стека и указать точный код этой строки.

3 голосов
/ 12 апреля 2010

вероятно, вы хотите:

if (rs != null) {
   if (rs.next()) {

или даже лучше:

if (rs != null && rs.next()) {

Ваш тест просто неверен.

2 голосов
/ 12 апреля 2010

С Заявление Javadocs :

public ResultSet executeQuery (String sql) выдает SQLException

Возвращает : ResultSet объект, который содержит произведенные данные по заданному запросу; никогда не обнуляется

Итак, вам не нужно проверять, rs == null.

Стандартный способ обработки строк набора результатов:

while (rs.next ()) {
   doSmth (rs);
} 
0 голосов
/ 12 апреля 2010

Вы сделали неправильное обозначение в условии if,

Так что поменяй, если (RS! = NULL) { ...... .......}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...