【问题标题】:Clob column java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG columnClob 列 java.sql.SQLException:ORA-01461:只能绑定 LONG 值以插入到 LONG 列中
【发布时间】:2014-08-09 17:30:49
【问题描述】:
insertSQL = "insert into TELBP_INPUT_LOG (SERIAL_NO, INPUT_XML) values (?, ?)";
statement = connection.prepareStatement(insertSQL);
statement.setString(1, serialNo);
statement.setString(2, inXml);          
//statement.setString(2, "test");
insertCount = statement.executeUpdate();

程序运行到executeUpdate()时,报错

java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column  

抛出,但是如果我复制serialNO和inXml的值在SQL developer中运行,没有错误提示,是什么原因?

oracle版本:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
专栏:
SERIAL_NO VARCHAR2(22)
INPUT_XML CLOB
Websphere:Websphere 5.1
jdbc: ojdbc14 和 ojdbc6 都试过了,都有同样的错误

【问题讨论】:

  • SERIAL_NO 和 INPUT_XML 有哪些列类型?

标签: java oracle sqlexception


【解决方案1】:

您不能将字符串写入 Clob 列。

代替

statement.setString(2, inXml); 

使用

statement.setClob(2, xmlClob);

首先需要创建xmlClob:

Clob xmlClob = connection.createClob();
Writer clobWriter = myClob.setCharacterStream(1);
clobWriter.write(inXml); 

【讨论】:

  • createClob() 是java 1.6 API,我只是使用java 1.4,还有其他方法吗?还有一个信息,在另一个使用 websphere 7 和 java 1.6 并使用相同代码 (setString()) 的服务器环境中,它没有任何错误!!为什么?
  • 我一直试图在网上找到 1.4 Javadoc,但它太旧了,现在我找不到了。如果它确实没有 setClob() 方法,您可能需要使用特定于 Oracle 的 API。至于 1.6,这个较新的版本可能会自动为您将字符串转换为 Clob。
  • ((oracle.jdbc.OracleResultSet) resultSet).getCLOB("clob_column");作家 writer = clob.getCharacterOutputStream(); writer.write(toStore.toCharArray()); writer.flush(); writer.close();
【解决方案2】:

对于 clob 字段,您可以使用 .setClob(..)

setString():Sets the designated parameter to the given Java String value. The driver converts this to an SQL VARCHAR or LONGVARCHAR value (depending on the argument's size relative to the driver's limits on VARCHAR values) when it sends it to the database.

API DOC

CLOB API DOC

【讨论】:

    【解决方案3】:

    Java(底层驱动程序)将 CLOB 视为字符流。当您设置字符串时,底层驱动程序实现将自动进行相关转换(字符串到 Varchar 等)。由于 CLOB 是一种特殊类型,因此程序员有责任执行必要的步骤。按照链接到现在如何使用 java 插入 clob: http://docs.oracle.com/javase/tutorial/jdbc/basics/blob.html

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 2012-02-11
      • 2020-06-22
      • 2012-07-08
      • 1970-01-01
      • 2013-06-01
      • 2017-08-29
      • 1970-01-01
      • 2016-05-07
      相关资源
      最近更新 更多