java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.ArrayIndexOutOfBoundsException: -32633
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62)
at com.mchange.v2.c3p0.impl.NewPooledConnection.handleThrowable(NewPooledConnection.java:432)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1737)
at com.et.dbtransport.DbImportImpl.transfer(DbImportImpl.java:137)
at com.et.dbtransport.HistoryTableImportJob.execute(HistoryTableImportJob.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -32633
at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2673)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10689)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
两条线程从数据库连接池中获得了俩数据库连接,分别对不同的表进行插入操作....插入操作时并发的, 出现的情况是: 一条线程的操作没有任何问题,但是另外一条的插入操作不到一会就一直抛出如上异常...(这个线程是在插入了一部分数据后,就一直抛出该异常), google,百度也没找到有用的信息...

解决方案 »

  1.   

    不同的线程就是不同的sesion,并行插入应该不会有问题的
      

  2.   

    其实你这样问,几乎两个问题联系不起来,大家也不知道你在问什么,因为错误提示是和数组下标越界有关系,而你一直在说多线程和链接数据库。呵呵,我也是猜一猜你问的是什么,因为就我的所看来,两个线程之所以冲突,两个线程冲突之处不爱护是数据结构的共享以及通信,通信的可能性不大,那么可能性较大的就是数据结构。这个一般需要查代码,你插入的时候,多个线程是否是从同一个结构中获取数据,如:ArrayList、Query、Stack或者自己定义的,并且这些数据结构并不是同步操作的,那么就完全有可能出现这种情况,试想一想一下情况:两个线程同时去访问这个结构,当你提取一个后,删掉一个结构中的数据,如果不是同步访问,可能就会有两个线程都会认为这个结构中存在数据,那么其中一个线程将数据获取并删掉后,另一个线程再去获取,必然就报你那个错误了,当然如果下标由于计算问题也会导致这种问题,呵呵,你自己查一下你的代码吧。