除以两个值后获得异常

时间:2012-10-20 05:52:25

标签: java numberformatexception

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

答案 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;