【发布时间】:2013-06-25 02:54:40
【问题描述】:
我有一个 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中就是
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(bigInt) VALUES(?)");
pstmt.setLong(1, one);
这似乎不起作用,所以我认为这是不正确的。任何帮助,将不胜感激。
【问题讨论】:
-
你试过 setBigDecimal() docs.oracle.com/javase/6/docs/api/java/sql/…, java.math.BigDecimal)
-
@BhavikShah 我试过 setBigDecimal,它仍然给我 ORA-00911:无效字符。我什至正在构建并打印出 sql insert 语句,然后将其粘贴到 sql developer 中,它工作正常。它只是在java中失败。
-
我遵循了一些与此类似的 SO 问题。不幸的是没有答案:( ..一个答案但建议将其存储为字符串。这对你有用吗?
-
@medium - 这是您的实际声明,还是您编辑过它?只是想知道你是否在命令字符串的末尾留下了一个分号——这在 SQL Developer 中可以工作,但通过 JDBC 抛出 ORA-00911。
-
我发现了这个问题。我很尴尬地说,在我的prepareStatment字符串中,我在末尾添加了一个分号 conn.prepareStatement("INSERT INTO TABLE(bigInt) VALUES(?);") ;对不起..谢谢你的帮助