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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在NULL [duplicate]上setFloat PreparedStatement(jdbc)的值相关的知识,希望对你有一定的参考价值。

我想用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。

我怎样才能做到这一点?

答案

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

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

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

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()的更多信息

另一答案

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

以上是关于如何在NULL [duplicate]上setFloat PreparedStatement(jdbc)的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中的内存中表示null [duplicate]

fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)O_NONBLOCK) == -1)

std::cout 一个 null char* 指针如何中止程序? [复制]

在 null 上调用了方法“timeZone”。 (颤振)[重复]

是否在未定义的 NULL 指针上调用函数? [复制]

Futtler 错误在 null 上调用了方法“toDouble”。接收方:null 尝试调用:toDouble() [重复]