0

我正在从数据库中检索两个值,需要将它们分开,但它在第 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)
4

4 回答 4

1

那是因为,您null从数据库中获取了一个无法传递给Integer.parseInt().

如果res.getString("value1");, 或res.getString("value2")is之一null,您将获得异常。

更好的方法是将该转换包装在try-catch块周围,并在catch块中打印 ; 的值res.getString("value1")。检查返回的实际值。

编辑: -

当然,您也可以先打印返回的值,然后再将其转换integer为是否存在null

于 2012-10-20T05:55:01.990 回答
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;
于 2012-10-20T06:05:43.890 回答
0
int value1 = Integer.parseInt(rs.getString("value1"));
int value2 = Integer.parseInt(rs.getString("value2"));

这一行必须给出 null 这就是为什么它给出空指针异常

于 2012-10-20T05:55:06.050 回答
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);
}
于 2012-10-20T05:55:13.073 回答