带有oracle NUMBER类型的jdbc预处理语句

时间:2013-06-27 14:31:51

标签: java oracle jdbc ojdbc

我有一个java应用程序,它建立了与Orcale数据库的jdbc连接。我试图将数据插入到数据库中,但是当涉及到oracle NUMBER类型时我很困惑。我的表中有三列分别属于这些类型。

NUMBER(38,0)
NUMBER(20,0)
NUMBER(16,0)

我的第一个问题是我应该将数据放入什么类型的java类型,以便在预准备语句中使用它。

我的第二个问题是我可以在预准备语句中使用什么设置操作来插入数据。

让我们假设我们正在使用NUMBER(38,0)。我会将java类型设置为BigInteger吗?如果我有一个整数1那么它将是

 BigInteger one = new BigInteger(1);

然后在我的预备声明中,它将是

 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(bigInt) VALUES(?)");
 pstmt.setLong(1, one);

这似乎不起作用,所以我认为这是不正确的。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:5)

setLong()无法接受BigInteger。如果您的数据库中的值确实超出了long,那么您可能需要使用setBigDecimal(),因为没有setBigInteger(),并且您的变量必须是BigDecimal类型{1}}。如果long包含数据库中的值范围,则只需使用longsetLong()

答案 1 :(得分:3)

你可以这样试试:

 oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue);
 cs.setObject(id, numberValue, OracleTypes.NUMBER);

其中bigIntegerValuejava.math.BigInteger的实例,它适用于我