0

データベースから 2 つの値を取得していて、それらを分割する必要がありますが、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")がである場合null、例外が発生します。

try-catchより良い方法は、その変換をブロックでラップし、ブロックで;catchの値を出力することです。res.getString("value1")返される実際の値を確認します。

編集: -

もちろん、変換する前に返された値を最初に出力して、それintegerがそうであるかどうかを確認することもnullできます。

于 2012-10-20T05:55:01.990 に答える
0
int value1 = Integer.parseInt(rs.getString("value1"));
int value2 = Integer.parseInt(rs.getString("value2"));

この行はnullを与えている必要があるため、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 に答える
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 に答える