使用ibatis进行批量更新出错,各位大牛帮忙看看这是哪儿的问题

问题描述

使用的firebird数据库,运行一段时间就会报以下错误。但是感觉代码没有问题啊,不知道问题出在哪里了。。。INFO|jvm1|2014/07/1222:32:42|com.ibatis.common.jdbc.exception.NestedSQLException:INFO|jvm1|2014/07/1222:32:42|---Theerroroccurredincom/emerson/upscoutersrvr/sql/firebird/System.xml.INFO|jvm1|2014/07/1222:32:42|---Theerroroccurredwhileexecutingmappedstatement.INFO|jvm1|2014/07/1222:32:42|---ChecktheSystem.updateRealData.INFO|jvm1|2014/07/1222:32:42|---Checkthestatementortheresultmap.INFO|jvm1|2014/07/1222:32:42|---Cause:java.lang.reflect.UndeclaredThrowableExceptionINFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:94)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:505)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:67)INFO|jvm1|2014/07/1222:32:42|atcom.emerson.upscoutersrvr.util.CommonDAO.executeUpdate(CommonDAO.java:202)INFO|jvm1|2014/07/1222:32:42|atcom.emerson.upscoutersrvr.device.NetAccessDevice.processRealData(NetAccessDevice.java:959)INFO|jvm1|2014/07/1222:32:42|atcom.emerson.upscoutersrvr.device.NetAccessDevice.process(NetAccessDevice.java:607)INFO|jvm1|2014/07/1222:32:42|atcom.emerson.upscoutersrvr.device.UpsDevice.run(UpsDevice.java:716)INFO|jvm1|2014/07/1222:32:42|atjava.lang.Thread.run(UnknownSource)INFO|jvm1|2014/07/1222:32:42|Causedby:java.lang.reflect.UndeclaredThrowableExceptionINFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:101)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:869)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:824)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:817)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:293)INFO|jvm1|2014/07/1222:32:42|atsun.reflect.GeneratedMethodAccessor10.invoke(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atjava.lang.reflect.Method.invoke(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.common.jdbc.SimpleDataSource$SimplePooledConnection.invoke(SimpleDataSource.java:958)INFO|jvm1|2014/07/1222:32:42|at$Proxy0.prepareStatement(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.execution.SqlExecutor.prepareStatement(SqlExecutor.java:494)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.execution.SqlExecutor.access$000(SqlExecutor.java:39)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.execution.SqlExecutor$Batch.addBatch(SqlExecutor.java:583)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.execution.SqlExecutor.addBatch(SqlExecutor.java:104)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:197)INFO|jvm1|2014/07/1222:32:42|atcom.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)INFO|jvm1|2014/07/1222:32:42|...8moreINFO|jvm1|2014/07/1222:32:42|Causedby:java.lang.ArrayIndexOutOfBoundsException:0INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.parseSqlInfo(AbstractJavaGDSImpl.java:2349)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlDescribeBind(AbstractJavaGDSImpl.java:1118)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.gds.impl.GDSHelper.prepareStatement(GDSHelper.java:196)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractStatement.prepareFixedStatement(AbstractStatement.java:1119)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractPreparedStatement.prepareFixedStatement(AbstractPreparedStatement.java:1176)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:124)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:41)INFO|jvm1|2014/07/1222:32:42|atsun.reflect.GeneratedConstructorAccessor6.newInstance(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atjava.lang.reflect.Constructor.newInstance(UnknownSource)INFO|jvm1|2014/07/1222:32:42|atorg.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:90)INFO|jvm1|2014/07/1222:32:42|...23more执行语句如下:<updateid="updateRealData"parameterClass="java.util.Map">UPDATESIGNALSETREAL_VALUE_NR=#realValve#<isNotEmptyprepend=","property="alarmSign">ALARM_SIGN_TX=#alarmSign#</isNotEmpty>WHEREEQUIP_ID=#deviceId#ANDSIGNAL_NR=#channel#</update>源码简化如下:Mapparam=newWeakHashMap();param.put("deviceId",getDeviceId());startTransaction();this.startBatch();for(inti=0;i<realDataSize;i++){Stringstatus="0";try{floatfRealValue=0;if(isUpdateSignalData()||!(upsRealDataStatus.get(i).equals(oldStatus.get(i)))){param.put("alarmSign",status);param.put("channel",newShort((short)(i+1)));//信号ID+1param.put("realValve",newFloat(fRealValue));executeUpdate("System.updateRealData",param);}}this.executeBatch();commitTransaction();}catch(Exceptione){e.printStackTrace();}finally{endTransaction();}

解决方案

解决方案二:
反射的时候字段对不上。parameterClass为什么不用javabean?
解决方案三:
感觉使用map也能实现,而且我的字段名和sql中的都是一样的啊
解决方案四:
引用2楼xn_xuke的回复:

感觉使用map也能实现,而且我的字段名和sql中的都是一样的啊

不是光字段名一样就能映射上,你看看ibatis的用map的文档。

时间: 2024-10-26 00:21:23

使用ibatis进行批量更新出错,各位大牛帮忙看看这是哪儿的问题的相关文章

mysql-求助:ibatis批量更新Mysql数据问题

问题描述 求助:ibatis批量更新Mysql数据问题 场景:根据消息号code和状态位status更新所有满足条件的字段值为"T".怎么批量更新?如果是单个条件的话直接用iterate标签把值放到in('xxx','yyy')循环就行了,where后面跟多个条件的时候mysql怎么处理呢? 解决方案 可以 直接在拼装之后在传入到ibatis的XML文件中 解决方案二: 循环的时候加个or就行了: update TABLE__NAME SET TABLE__COLUMN='T' whe

Ibatis怎么做批量更新?????

问题描述 <insert id="updateStatusBatch" parameterClass="hashMap">   update   Question   set   status = #status#   <dynamic prepend="where questionId in">   <isNotNull property="actionIds">   <iterat

ibatis-sql 批量更新 一个(还有多个选项的)字段

问题描述 sql 批量更新 一个(还有多个选项的)字段 有2张表 一个学生表,一个状态表 学生表里面有个字段是学生奖项(1,2,3) 对应的奖项名称是状态表里面的内容. !!! 主要内容: 是通过学生的id(批量)修改奖项(awards)这个字段,每个青年的奖项可能不同(如:A学生有:2,3.B学生有:3,4).奖项也是含有多个值的(如1,2,3,4,5..) 现在要去掉其中一个奖项,或者增加一个奖项. sql语句要如何写?用ibatis如何操作. 解决方案 下面是对SQL Server的,如果

SqlCommandBuilder如何实现批量更新_实用技巧

一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成SqlDataAdapter的属性命令,比如: .UpdateCommane insertCommand selectCommand等.  但是有些程序员不喜欢用设计器,或者是有些地方没必要拖动SqlDataAdapter这么个庞大物来实现,那么SqlDataAdapter就不会自动生成相关的查询或更新语句了. 所以当执行到SqlD

在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据_自学过程

导言: 在前面的教程,我们对数据访问层进行扩展以支持数据库事务.数据库事务确保一系列的操作要么都成功,要么都失败.本文我们将注意力转到创建一个批更新数据界面. 在本文,我们将创建一个GridView控件,里面的每一行记录都可以进行编辑(见图1),因此我们没有必要多添加一列来包含Edit, Update,和Cancel按钮,而是在页面包含2个"Update Products"按钮,被点击时,遍历所有的产品并对数据库进行更新.让我们开始吧. 图1:GridView控件里的每一行记录都可以编

DreamweaverMX实现网站批量更新

dreamweaver 在Dreamweaver 4.0中,我们就已接触了模板与库的概念,知道它们是批量生成风格类似的网页的好工具.如今在Dreamweaver MX(以下简称DW MX)中,模板与库的功能得到了进一步细化与加强,尤其是实现关联网页自动更新的特点,使得模板与库成为DW MX的一大亮色. 1.首先我们来看看模板的应用,与Dreamweaver 4.0不同的是,DW MX把模板的操作拓展到了"Modify"与"Insert"两个菜单下.同时,在 &quo

使用 DataAdapter 执行批量更新

执行    摘自MSDN: 在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行.因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改.如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand.InsertCommand 或 DeleteCommand.每一次行更新都涉及网络与数据库之间的双向数据传输. 在 ADO.NE

用Dreamweaver MX实现网站批量更新

dreamweaver     在Dreamweaver 4.0中,我们就已接触了模板与库的概念,知道它们是批量生成风格类似的网页的好工具.如今在Dreamweaver MX(以下简称DW MX)中,模板与库的功能得到了进一步细化与加强,尤其是实现关联网页自动更新的特点,使得模板与库成为DW MX的一大亮色.     1.首先我们来看看模板的应用,与Dreamweaver 4.0不同的是,DW MX把模板的操作拓展到了"Modify"与"Insert"两个菜单下.同

批量更新数据

数据 最近做一项目,遇到了批量更新数据,代码 如下: 一个update的例子:<%@ Page language="C#" Debug="true" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"