Hibnerate报数据大小超出此类型的最大值错误

goldlive_8888 2009-03-23 09:40:08
我的配置是spring1.2+hibernate3+strut1.2,数据库Oracle9
数据源在tomcat中,配置为:
<Context path="/***" docBase="***" debug="0" reloadable="true">
<Resource name="jdbc/***" auth="Container"
type="javax.sql.DataSource"
username="***" password="***"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@*.*.*.*:1521:***"
maxActive="4" maxIdle="2"/>
<ResourceLink name="UserTransaction"
global="UserTransaction"
type="javax.transaction.UserTransaction"/>
</Context>
表的字段类型是varchar(4000);这里不能用clob,Blob(必要条件)
我想存入1000个汉字,实际输入900个就报这个错误:
- SQL Error: 17070, SQLState: null
- 数据大小超出此类型的最大值: 2700
- Could not synchronize database state with session
- [e] (HibernateTemplate): encountered SQLException [数据大小超出此类型的最大值: 2700]; nested exception is java.sql.SQLException: 数据大小超出此类型的最大值: 2700
org.springframework.jdbc.UncategorizedSQLException: (HibernateTemplate): encountered SQLException [数据大小超出此类型的最大值: 2700]; nested exception is java.sql.SQLException: 数据大小超出此类型的最大值: 2700
java.sql.SQLException: 数据大小超出此类型的最大值: 2700
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:147)
at oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2461)
at oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1155)
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:1572)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:131)
at net.sf.hibernate.type.StringType.set(StringType.java:26)
at net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:48)
at net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:35)
at net.sf.hibernate.persister.EntityPersister.dehydrate(EntityPersister.java:387)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:460)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:436)
at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2449)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2435)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2392)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2261)
at net.sf.hibernate.transaction.JTATransaction.commit(JTATransaction.java:52)
at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:472)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:397)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:243)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:66)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
我试了用了Oracle10的ojdbc14.jar放在tomcat\common\lib下,可是不行。那位达人能提供些解决的方案,在下不胜感激!
...全文
642 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawn023 2009-03-24
  • 打赏
  • 举报
回复
改成varchar2或nvarchar都不可以的。会出现一样的问题。
ahhshan 2009-03-24
  • 打赏
  • 举报
回复
帮顶
kokobox 2009-03-24
  • 打赏
  • 举报
回复
你把varchar(4000)改为varchar2(4000)试一试
kokobox 2009-03-24
  • 打赏
  • 举报
回复
你用PreparedStatement应该就不会有单引号报错的问题。

goldlive_8888 2009-03-24
  • 打赏
  • 举报
回复
我现在已经实现了插入1000个字段,方法是在Hibernate的回调函数中使用JDBC,但有个问题,如果插入的内容有单引号就会报错,我是在存入数据库之前把'变成’,下面是代码,如果那位有同样的问题,希望能有所帮助。
public void saveAnswerRecord(final AnswerRecord answerRecord){
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
String sql = "insert into TBL_ANSWER_RECORD (" +
"RECORD_ID,MAIN_SHEET_FLOW_NO,BEGIN_TIME,END_TIME," +
"ANSWER_AGENT_CODE,ANSWER_CONTENT,RECORD_TYPE,RECORD_RESULT) " +
"values(" +
"\'" + answerRecord.getRecordID() + "\'," +
"\'" + answerRecord.getMainSheetFlowNO()+ "\'," +
"\'" + answerRecord.getBeginTime() + "\'," +
"\'" + answerRecord.getEndTime() + "\'," +
"\'" + answerRecord.getAnswerAgentCode() + "\'," +
"\'" + answerRecord.getAnswerContent() + "\'," +
"\'" + answerRecord.getRecordType() + "\'," +
"\'" + answerRecord.getResult() + "\'" +
")";
Connection conn = session.connection();
Statement stmt = conn.createStatement();
boolean result = stmt.execute(sql);
if(!result){
System.out.println("*********插入 TBL_ANSWER_RECORD 成功************");
}
return null;
}
});
}
dawn023 2009-03-23
  • 打赏
  • 举报
回复
根据网上一位网友的介绍,这是一个Oracle JDBC Driver的Bug。
原因是PreparedStatement的setString()会预检查数据类型,而这部分代码未考虑双字节字符的问题,所以就误报了。
解决方案:不用PreparedStatement,而直接组成sql语句插入。弊端是需要自己实现一个字符串转义过程,效率也稍微差那么一点点吧。

建议用CLOB字段来解决比较好。
源码链接: https://pan.quark.cn/s/9f500ac403c2 摄像头配置是嵌入式系统构建中的一个关键步骤,它涉及到硬件与软件的紧密协作。图像信号处理器(ISP)作为图像信号处理的核心单元,在摄像头配置过程中扮演着至关重要的角色。在硬件层面,它涵盖了摄像头与ISP之间的连接以及信号传输的细节;在软件层面,主要依托V4L2框架进行视频流的采集和处理。接下来将具体说明文档中涉及的硬件机制、软件机制、信号配置及V4L2等领域的摄像头配置实践经验。 ### 硬件机制与连接 文档首先阐述了硬件线路中中央处理器与摄像头之间的连接方式。在此,相机串行接口(CSI)模块是摄像头数据传输的核心部分,它负责与外部CMOS图像感应元件进行交互。CSI接口包含以下几个关键信号线: 1. **CSI_VSYNC (垂直同步信号)**:用于标示一帧图像的起始点。该信号传输方向为从图像感应元件(sensor)至应用处理器(AP)。 2. **CSI_HSYNC (水平同步信号)**:用于提供行同步信号,并用于识别消隐信号。同样,信号流向为sensor至AP。 3. **CSI_D[7:0]**:8位摄像头数据总线,用于传输各种图像数据,包括YUV、YCC、RGB或Bayer格式。数据流向为sensor至AP。 4. **CSI_MCLK (传感器主时钟信号)**:由传感器输出主时钟信号,为外部摄像头提供时钟基准。信号流向为AP至sensor。 5. **CSI_PIXCLK (像素时钟信号)**:由摄像头输出,通常与MCLK主时钟信号频率相同。信号流向为sensor至AP。 正确设置这些连接,确保信号同步传输,是硬件配置的基础。 ### 软件机制与驱动程序 摄像头驱动...
文末附数据集可视化效果图。 【数据集概况】 · 检测类别(中文):[大豆(soybean)] · 训练集:777 张 · 验证集:0 张 · 测试集:0 张 · 总计:777 张 该数据集聚焦农业科研领域,针对温室环境下大豆幼苗的精准检测需求,为植物生长监测与自动化管理提供高质量数据支撑。训练集777张,验证集和测试集为0张,符合农业科研场景中对特定生长阶段样本集中训练的需求,确保模型在目标场景下的泛化能力。所有样本均采用精准的边界框标注,标注规范统一,确保了数据集在大豆幼苗检测任务中的高精度与可靠性。该数据集可应用于农业科研机构的植物生长监测系统、智能温室管理平台等场景,... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 100 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9922** mAP50-95 | 0.9141 Precision | 0.9771 Recall | 0.9710 train/box_loss | 0.4231 train/cls_loss | 0.1829 val/box_loss | 0.3920 val/cls_loss | 0.1737 【训练过程分析】 100 轮训练后 mAP50 达到 0.9922,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9141,和 mAP50 差距仅 0.08,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9771、Recall 0.9710,精召双高,模型对大豆的检测能力强。...

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧