我正从数据库中检索两个值,需要将它们分开,但它在第1行和第2行给出了空指针异常
1 int value1 = Integer.parseInt(rs.getString("value1"));
2 int value2 = Integer.parseInt(rs.getString("value2"));
3 double result = (double)value1/value2;
Error
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:417)
at java.lang.Integer.parseInt(Integer.java:499)
答案 0 :(得分:1)
这是因为,您从数据库中获得null
值,无法传递给Integer.parseInt()
。
如果其中一个res.getString("value1");
或res.getString("value2")
为null
,您将获得例外。
更好的方法是围绕try-catch
块包装转换,并在catch
块中打印res.getString("value1")
的值;检查返回的实际值。
编辑: -
当然,您还可以先打印返回的值,然后再将其转换为integer
,以查找是否为null
。
答案 1 :(得分:0)
int value1 = Integer.parseInt(rs.getString("value1"));
int value2 = Integer.parseInt(rs.getString("value2"));
这一行必须给出null,这就是为什么它给出空指针异常
答案 2 :(得分:0)
您只能解析字符串形式的整数值。对于例如:
int i = Integer.parseInt("20");
int j = Integer.parseInt("NaN"); // throws NumberFormatException
此外,您应该检查null
的值,以避免NPE
:
int v1=0, v2=0;
String value1 = rs.getString("value1");
if(value1 != null) {
v1 = Integer.parseInt(value1);
}
String value2 = rs.getString("value2");
if(value1 != null) {
v2 = Integer.parseInt(value2);
}
答案 3 :(得分:0)
你可以......
double result = 0;
String value1 = rs.getString("value1");
String value2 = rs.getString("value2");
if (value1 != null && value2 != null) {
try {
result = (double)(Integer.parseInt(value1) / (double)Integer.parseInt(value2))
} catch (NumberFormatException exp) {
// Handle or re-throw exception...
}
}
return result;
或者,如果列值实际上是数字......
double result = 0;
int value1 = rs.getInt("value1");
int value2 = rs.getInt("value2");
if (result2 > 0) {
result = (double)value1 / (double)value2;
}
return result;
或者,这可能更简单
double result = 0;
int value1 = rs.getDouble("value1");
int value2 = rs.getDouble("value2");
if (result2 > 0) {
result = value1 / value2;
}
return result;