【问题标题】:jdbc prepared statement with oracle NUMBER type带有 oracle NUMBER 类型的 jdbc 准备好的语句
【发布时间】: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(?);") ;对不起..谢谢你的帮助

标签: java oracle jdbc ojdbc


【解决方案1】:

你可以试试这个方法:

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

bigIntegerValuejava.math.BigInteger 的一个实例,它适用于我

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2013-12-06
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多