如何在NULL [duplicate]上setFloat PreparedStatement(jdbc)的值

问题描述 投票:4回答:3

我想用Java程序在我的数据库中插入大量数据。我正在尝试管理String的值可能为空的事实,这样,我想将值设置为null。

这不起作用(pstm.setFloat...):

PreparedStatement pstm;
try {
    pstm = connex.prepareStatement("INSERT INTO opfofa._produit_val_nut VALUES (?,?,?,?,?,?,?,?,?,?)");
    pstm.setInt(1,id);
    pstm.setString(2,tabChaine[8]);
    pstm.setFloat(3,tabChaine[9].isEmpty()? null:Float.valueOf(tabChaine[9]));
    ...
    pstm.executeUpdate();
}catch(PSQLException e) {
    System.out.println("already inserted : "+e);
}

错误:java.lang.NullPointerException,这是正常的,因为我们不能将float设置为null但是在PostgreSQL中我可以将Numeric列设置为null。

我怎样才能做到这一点?

java postgresql jdbc null insert
3个回答
2
投票

setFloat投掷NullPointerException,因为它期望原始float而不是Float对象。您可以尝试使用setObject方法 - 如果需要,它允许使用null值。就像是:

pstm.setObject(3, tabChaine[9].isEmpty() ? null : Float.valueOf(tabChaine[9]), java.sql.Types.FLOAT);

2
投票

代码看起来应该是这样的:

PreparedStatement pstm;
try {
    pstm = connex.prepareStatement("INSERT INTO opfofa._produit_val_nut VALUES (?,?,?,?,?,?,?,?,?,?)");
    pstm.setInt(1,id);
    pstm.setString(2,tabChaine[8]);
    if (tabChaine[9].isEmpty()) {
        pstm.setNull(3, java.sql.Types.FLOAT);
    }
    else {
        pstm.setFloat(3,Float.valueOf(tabChaine[9]));
    }
    ...
    pstm.executeUpdate();
}catch(PSQLException e) {
    System.out.println("already inserted : "+e);
}

有关setNull()的更多信息


0
投票

如果需要将参数设置为null,则必须使用setNull()

© www.soinside.com 2019 - 2024. All rights reserved.