it-swarm.com.de

Umgang mit dem Nullwert aus einem Resultset in JAVA

Ich habe derzeit eine Ergebnismenge zurückgegeben und in einer der Spalten kann der String-Wert null sein (ich meine überhaupt keine Werte). Ich habe eine Bedingung, um wie folgt zu implementieren

    rs = st.executeQuery(selectSQL);

    output = rs.getString("column");

Da die Spalte in der Datenbank möglicherweise null ist, gibt rs.getString () eine NullPointerException () aus, wenn column Null ist. Wenn column den Wert null hat, möchte ich, dass die Ausgabe eine leere Zeichenfolge wie output = "" ist. Ich kann if nicht überprüfen (rs.getString ("Spalte)! = Null). Wie kann ich diese Situation angehen?

Mein eigentliches Problem: 

 try{
      rs = st.executeQuery(sql);

      int i = 0;
      while(rs.next()){
            output[i] = rs.getString(column);          
            // column field in the database contains multiple results, but sometimes
            // may be null
            i++;
      }
 }catch{SQLException e){
      e.printStackTrace();
  // other than tracing the exception i want to fill the array too
 }
return output;

Wenn nun einer der Spaltenwerte keinen Wert enthält, d.h. null, möchte ich die Ausgabe [i] als N/A definieren. All dieses Problem rührt von der Tatsache her, dass das Feld column NULL in der Datenbank zulässig ist. Und es tut mir leid, dass ich Ihnen gesagt habe, dass es sich um eine NPE handelt, während es sich tatsächlich um die SQLException handelt ... (noob hier). 

33
javaNOob

Da die Spalte in .__ null sein kann. Datenbank, wird die rs.getString () eine NullPointerException () werfen

Nein.

rs.getString gibt NullPointer nicht aus, wenn die Spalte in der ausgewählten Ergebnismenge (SELECT-Abfragespalten) enthalten ist. 

String myValue = rs.getString("myColumn");
if (rs.wasNull()) {
    myValue = ""; // set it to empty string as you desire.
}

Vielleicht möchten Sie auf wasNull() Dokumentation verweisen - 

From Java.sql.ResultSet
boolean wasNull() throws SQLException;

* Reports whether
* the last column read had a value of SQL <code>NULL</code>.
* Note that you must first call one of the getter methods
* on a column to try to read its value and then call
* the method <code>wasNull</code> to see if the value read was
* SQL <code>NULL</code>.
*
* @return <code>true</code> if the last column value read was SQL
*         <code>NULL</code> and <code>false</code> otherwise
* @exception SQLException if a database access error occurs or this method is 
*            called on a closed result set
*/
53
d-live
output = rs.getString("column");// if data is null `output` would be null, so there is no chance of NPE unless `rs` is `null`

if(output == null){// if you fetched null value then initialize output with blank string
  output= "";
}
16
Jigar Joshi

Die Beschreibung der getString () -Methode besagt Folgendes:

 the column value; if the value is SQL NULL, the value returned is null

Das bedeutet, dass Ihr Problem nicht darin besteht, dass der String-Wert null ist, sondern ein anderes -Objekt. Vielleicht ist Ihr ResultSet oder Sie haben die Verbindung oder etwas geschlossen. Stellen Sie den Stack-Trace bereit, das würde helfen.

6
Chris

Wenn der String null ist, ist dies eine sehr gute Chance. Wenn Sie jedoch Werte in Ihrer Tabelle sehen, die vom ResultSet trotzdem eine Null ist, kann dies bedeuten, dass die Verbindung geschlossen wurde, bevor der Wert von ResultSet verwendet wurde.

Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:My_db.db");
String sql = ("select * from cust where cust_id='" + cus + "'");
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
con.close();
System.out.println(rs.getString(1));

Würde null auch dann drucken, wenn Werte vorhanden sind.

Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:My_db.db");
String sql = ("select * from cust where cust_id='" + cus + "'");
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
System.out.println(rs.getString(1));
con.close();

null würde nicht gedruckt, wenn die Tabelle Werte enthält.

2
Barath

Ich konnte das machen: 

String a;
if(rs.getString("column") != null)
{
    a = "Hello world!";
}
else
{
    a = "Bye world!";
}
1
Sedrick

Um die Validierung zu behandeln, wenn ein Feld in der Datenbank null ist, können Sie die folgende Bedingung hinzufügen.

String name = (oRs.getString ("name_column"))! = Null? oRs.getString ("name_column"): "";

damit können Sie überprüfen, ob ein Feld den Wert null hat, und keine Ausnahme markieren.

0
joselitoo

Der Code sollte wie unten angegeben sein

String selectSQL = "SELECT IFNULL(tbl.column, \"\") AS column FROM MySQL_table AS tbl";
Statement st = ...;
Result set rs = st.executeQuery(selectSQL);
0
nikelio