Обработка нулевого значения из набора результатов в 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... (здесь здесь нет).
Ответы
Ответ 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!";
}