[CONTAINER-31] 【S2JDBC】SQLコメント中の?があるとjava.lang.ArrayIndexOutOfBoundsExceptionが起こることがある Created: 2007-02-21  Updated: 2007-03-23  Resolved: 2007-03-23

Status: Resolved
Project: S2Container
Component/s: S2Container
Affects Version/s: 2.3.16, 2.4.8
Fix Version/s: 2.3.19, 2.4.12

Type: Bug Priority: Major
Reporter: azusa Assignee: koichik
Resolution: Fixed Votes: 0
Labels: None

Attachments: Text File seasar2.patch    

 Description   

DAO-72で報告された件なのですが、例外の発生箇所がS2Containerなのでこちらに振ります。

S2Daoのorg.seasar.dao.impl.DefaultTest#InsertByManualSql2Txをテストケースとして実行すると、以下の例外が発生します。
java.lang.ArrayIndexOutOfBoundsException: 1
at org.seasar.extension.jdbc.impl.BasicHandler.getCompleteSql(BasicHandler.java:148)
at org.seasar.extension.jdbc.impl.BasicUpdateHandler.execute(BasicUpdateHandler.java:62)
at org.seasar.dao.impl.UpdateDynamicCommand.execute(UpdateDynamicCommand.java:43)
at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:53)
at org.seasar.dao.pager.PagerS2DaoInterceptorWrapper.invoke(PagerS2DaoInterceptorWrapper.java:64)
at org.seasar.dao.impl.DefaultTest$DefaultTableDao$$EnhancedByS2AOP$$f6438d$$MethodInvocation$$insertBySql23.proceed(MethodInvocationClassGenerator.java)
at org.seasar.dao.impl.DefaultTest$DefaultTableDao$$EnhancedByS2AOP$$f6438d.insertBySql2(DefaultTest$DefaultTableDao$$EnhancedByS2AOP$$f6438d.java)
at org.seasar.dao.impl.DefaultTest.testInsertByManualSql2Tx(DefaultTest.java:273)
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:585)
at junit.framework.TestCase.runTest(TestCase.java:164)
at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:305)
at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:92)
at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:190)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

SQLコメント中の「?」をBasicHandler#getCompleteSqlで削除できないでしょうか?



 Comments   
Comment by koichik [ 2007-03-23 ]

対応しました.

Comment by azusa [ 2007-03-05 ]

当座しのぎですが、ArrayIndexOutOfBoundsExceptionが発生する条件下では
PreparedStatementをそのまま出力するようにしてみました。

Generated at Wed Apr 16 11:12:59 JST 2025 using Jira 10.5.0#10050000-sha1:9d9d098bb7b67e8dba8da380ba9c3900d82ac3cf.