Подтвердить что ты не робот

Обработка нулевого значения из набора результатов в JAVA

В настоящее время у меня есть возвращаемый результирующий набор, и в одном из столбцов значение строки может быть нулевым (я вообще не имею никаких значений). У меня есть условие для реализации, как показано ниже.

    rs = st.executeQuery(selectSQL);

    output = rs.getString("column");

Поскольку столбец может быть нулевым в базе данных, rs.getString() будет генерировать NullPointerException(), когда столбец имеет значение null. Если столбец null, я хочу, чтобы вывод был пустой строкой, такой как output = "; Я не могу проверить, если (rs.getString(" column)!= Null. Как я могу решить эту ситуацию?

Моя реальная проблема:

 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;

Теперь, если одно из значений столбца не содержит значения i.e. null, я хочу, чтобы выход [i] определялся как N/A. Вся эта проблема связана с тем, что поле столбца NULL разрешено в базе данных. И жаль, ребята, что рассказывали вам, что это NPE, а на самом деле SQLException... (здесь здесь нет).

4b9b3361

Ответ 1

Поскольку столбец может быть нулевым в базы данных, rs.getString() будет бросить NullPointerException()

Нет.

rs.getString не будет вызывать NullPointer, если столбец присутствует в выбранном наборе результатов (столбцы запроса SELECT) Для конкретной записи, если значение для 'comumn равно null в db, вы должны сделать что-то вроде этого -

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

Вы можете обратиться к документации isNull() -

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
*/

Ответ 2

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

Ответ 3

Описание метода getString() говорит следующее:

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

Это означает, что ваша проблема не в том, что значение String равно null, а другое объект, возможно, ваш ResultSet или, возможно, вы закрыли соединение или что-то как это. Предоставьте трассировку стека, которая поможет.

Ответ 4

Строка, являющаяся нулевым, является очень хорошим шансом, но когда вы видите значения в своей таблице, но нуль печатается ResultSet, это может означать, что соединение было закрыто до того, как было использовано значение ResultSet.

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

Будет напечатан null, даже если есть значения.

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, если в таблице есть значения.

Ответ 5

Я смог сделать это:

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