java - 无法使用 JDBCTemplate 插入扩展 VARCHAR2

标签 java oracle

需要将超过 4000 个字节存储到 Oracle 数据库中的 VARCHAR2 中。解决方法是在数据库上使用“扩展数据类型”来增加容量。我最多存储 2000 个字符,但我插入的特殊字符每个最多 3 个字节。

http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF55623

使用 SQLDeveloper 或 SQL 语句进行手动插入工作正常。使用 2000 个字符/6000 字节进行测试。

但是,当尝试使用 NamedParameterJdbcTemplate 插入任何超过 4000 字节的字符串时,我收到以下错误:

由以下原因引起:java.sql.SQLException:ORA-01461:只能绑定(bind) LONG 值以插入 LONG 列

这让我相信这是某种类型的驱动程序问题。我正在使用依赖项:

    <dependency>
        <groupId>com.oracle.weblogic</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>10.3.6.0</version>
    </dependency>

代码:

@Override
public Number createRecord(Number incidentId, String type, 
String verbatim, String createdBy) {
     MapSqlParameterSource parameters = new MapSqlParameterSource();
     parameters.addValue(MyConstants.MAP_VERBATIM, verbatim);
     namedTemplate.update(insertRecordSql, parameters, key, new 
     String[]{"VERBATIM_ID"});
     return key.getKey();
}

列定义:

“VERBATIM”VARCHAR2(2000 CHAR) NOT NULL 启用

最佳答案

你的 Maven 条目看起来很奇怪。您正在尝试利用oracle 12c增强功能,但您仍然使用来自 oracle 10 <version>10.3.6.0</version> 的 jar 。此外,如果你的jdk高于jdk6,你可能必须使用ojdbc7

关于java - 无法使用 JDBCTemplate 插入扩展 VARCHAR2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44893284/

相关文章:

java - Java序列化如何保证枚举的一致性?

oracle - PLS-00103 : Encountered the symbol "(" when expecting

java - 如果我写断言 true 或断言 false,我看不到影响。为什么?

java - 从输入分隔值中获取数组

java - XMLGregorianCalendar 2010-12-21T08 :55:17E-7+01:00 E-7. E-7 是什么意思

java - java中如何使用数组列表访问访问列表类型对象的方法

java - 提交期间的延迟(使用 JPA/JTA)

Oracle - 保护源代码

java - ByteBuffer 转 bigdecimal、binary、string

oracle - oracle中如何获取最后执行的SQL语句并绑定(bind)变量值