当前位置: 首页 > news >正文

网站建设品牌策划云服务器免费

网站建设品牌策划,云服务器免费,广州增城网站建设,网站建设业务员培训问题描述 JDK8使用ojdbc8驱动操作oracle11g数据库,使用JDBC复用 PreparedStatement 对象执行Insert操作时,报错java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值。,经测试发现,是预编译对象某个占位符号被赋…

问题描述

JDK8使用ojdbc8驱动操作oracle11g数据库,使用JDBC复用 PreparedStatement 对象执行Insert操作时,报错java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值。,经测试发现,是预编译对象某个占位符号被赋值为NULL后,再次尝试赋值为2个汉字,执行时就会报错:

Caused by: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:702)at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:608)at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1248)at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:1041)at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:443)at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:518)at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:251)at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1181)at oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:1571)at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1345)at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3728)at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:3905)at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3880)at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:993)at com.p6spy.engine.wrapper.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:94)at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:241)

问题复现

测试表DDL

CREATE TABLE "TEST_TABLE" ("TEST_COLUMN" VARCHAR2(255 BYTE)
)

java代码

   @Testpublic void testOracleChineseInsert() {try (Connection oracleConnection = getOracleConnection()) {Statement statement = oracleConnection.createStatement();statement.execute("truncate table TEST_TABLE");PreparedStatement preparedStatement = oracleConnection.prepareStatement("INSERT INTO TEST_TABLE VALUES (?)");List<String> list = new ArrayList<>();list.add("你好");list.add(null);list.add("你好");for (String data : list) {try {preparedStatement.setString(1, data);preparedStatement.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}}} catch (SQLException e) {throw new RuntimeException(e);}}

ORACLE数据库字符集

-- 查询字符集
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
-- 查询结果
NLS_CHARACTERSET	ZHS16GBK
NLS_NCHAR_CHARACTERSET	AL16UTF16

依赖版本

<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>23.2.0.0</version>
</dependency>

执行结果

前两条记录能新增成功,第三条记录报错 ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

解决办法

更换驱动版本后发现该BUG已被修复,更新驱动版本(推荐)

<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>23.6.0.24.10</version>
</dependency>

或者代码中避免复用预编译对象,每个语句新建一个预编译对象(不推荐)

   @Testpublic void testOracleChineseInsert() {try (Connection oracleConnection = getOracleConnection()) {Statement statement = oracleConnection.createStatement();statement.execute("truncate table TEST_TABLE");List<String> list = new ArrayList<>();list.add("你好");list.add(null);list.add("你好");for (String data : list) {try {PreparedStatement preparedStatement = oracleConnection.prepareStatement("INSERT INTO TEST_TABLE VALUES (?)");preparedStatement.setString(1, data);preparedStatement.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}}} catch (SQLException e) {throw new RuntimeException(e);}}
http://www.ds6.com.cn/news/13412.html

相关文章:

  • 建设部四库一平台查询优化工具箱
  • 广州网站建设星珀近期舆情热点事件
  • 邯郸网站建设的地方枸橼酸西地那非片功效效及作用
  • 网站建设十年杜绝模板阿里云建站费用
  • 利用jsp做网站谷歌浏览器下载官网
  • 网站登录模板360外链
  • 在网站上放广告2023年8月疫情恢复
  • 怎样做联盟网站线在成都网站推广公司
  • 用vs做网站教程一个平台怎么推广
  • 北京移动端网站seo网络优化专员是什么意思
  • 有谁想做网站 优帮云广州seo搜索
  • 如何用本地视频做网站seo免费浏览网站
  • vs手机网站开发北京seo外包 靠谱
  • 网站前台右侧怎么做二维码凡科建站怎么样
  • 在网上哪个网站可以做兼职竞价推广代运营企业
  • 盘锦公司做网站石家庄seo全网营销
  • 重庆响应式网站平台seo快速优化软件
  • 网站文章发布seo是什么seo怎么做
  • 如何做简单的网站百度点击排名收费软件
  • 做彩投网站犯法吗网络小说排行榜
  • 电子工程师证怎么考西安seo外包
  • vps 同时wordpress vpn太原网站快速排名优化
  • 重庆旅游网站建设如何在微信上做推广
  • 开发一套小程序需要多少钱抖音seo点击软件排名
  • 怎么做商品购买网站域名是什么
  • seo营销推广全程实例朝阳区seo
  • 石家庄微网站建设公司哪家好线上营销怎么做
  • 定期更新网站国外搜索网站排名
  • 先有域名才可以做网站吗网上如何推广自己的产品
  • 淄博网站建设多少钱seo外链发布技巧