2010-04-12 8 views
1

Salut, je reçois nullpointerexception à rs.next() ou rs.getString (1) il est vraiment étrange que parfois rs.next() fonctionne bien et il jette nullpointerexception à rs.getString ("productCode"), parfois il jette NPE à rs.getString ("PRODDATE") je ne comprends pas pourquoi rs.getString() thows NPE tout rs.next() fonctionne très bienJDBC pointeur nul Exception levée

Voici mon code

{ 
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); 

} 
} 
+1

vous manquez également un couple de + dans le code qui construit la requête – dfa

+0

@dfa: c'est parce que c'est un crosspost d'ici: http://forums.sun.com/thread.jspa?threadID=5435361 Malheureusement le soleil/Les forums Oracle mangent le code source lorsqu'il n'est pas publié avec des balises de code. –

+0

Veuillez poster la pile. – BalusC

Répondre

3

probablement vous voulez:

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

ou mieux encore:

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

Votre test est tout simplement faux.

+0

vous vouliez dire si '(rs! = Null && rs.next())' probablement – Roman

+0

Votre test est également faux. Dans le code de harigm, rs ne peut pas être nul, quand rs.next() est invoqué. – jarnbjo

+0

Dans le code de harigm, le premier test est de savoir si rs est nul. Ainsi, tout appel à une instance de rs déclenchera automatiquement une exception NullPointerException. De plus, l'opérateur && permet de tester si une instance est null avant d'appeler une méthode. –

0

Vous avez fait une mauvaise notation si la condition,

changer donc comme, si (rs! = Null) { ...... .......}

2

De Statement javadocs:

ResultSet publique executeQuery (String sql) throws SQLException

Retours: un objet ResultSet contenant les données produites par la requête donnée; jamais nulle

, vous ne devez donc vérifier si rs == null.

La méthode standard pour procéder lignes ResultSet est:

while (rs.next()) { 
    doSmth (rs); 
} 
3

Statement#executeQuery()jamais retours null. La nullcheck entière est superflu. L'idiome normale est la suivante:

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

Votre problème réel est ailleurs. Ceci est clairement une mauvaise interprétation de la pile. Pour le clouer correctement, vous devez rechercher le numéro de ligne de la première ligne dans la pile et pointer le code exact sur ce numéro de ligne.