2

テーブルを生成し、そのテーブルにデータを挿入しています。テーブルは、複雑な関係を持つデータから作成されます。これは、BIツールのユーザーがデータを簡単に処理できるようにするために作成されました。

これらのテーブルはたくさんあり、それぞれがユーザー生成データに基づいて異なります。あるケースでは、インデックスが範囲外の例外を取得しています。メタデータを検査するとき、それは範囲外ではありません。

正確な例外メッセージは次のとおりです。

com.microsoft.sqlserver.jdbc.SQLServerException: The index 13 is out of range

生成される挿入ステートメントは次のとおりです。

INSERT INTO [F22_AF] ([frcId],[eId],[aId],[dateCreated],[DateofThing],[Wasthisaninjury],[Whowainjured],[WhowainjuredFNAME],[WhowainjuredLNAME],[Whatwasinvolved],[WhatwasinvolvedDATA],[WhatOptionsWereAvailable],[AccidentWitnessed]) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)

目撃された事故の値が設定されると、例外がスローされます。値が設定されようとしているときに、列のインデックスと値を出力しました。

13:AccidentWitnessed = false

それが失敗したとき、私は挿入ステートメントからメタデータを出力し、これを取得しました:

parameterMetaData.getParameterCount()= 13

ColIndex-タイプ|| クラス

1 --int || java.lang.Integer

2-int || java.lang.Integer

3-int || java.lang.Integer

4-日時|| java.sql.Timestamp

5-日時|| java.sql.Timestamp

6 --nvarchar || java.lang.String

7 --int || java.lang.Integer

8-nvarchar || java.lang.String

9-nvarchar || java.lang.String

10-int || java.lang.Integer

11-nvarchar || java.lang.String

12 --int || java.lang.Integer

13ビット|| java.lang.Boolean

col index 13を設定しようとすると、Index Out Of Rangeが表示されますが、メタデータによると存在します。それが存在しなかった場合、別の範囲外の例外が発生します。

同じコードが異なるデータセットに対して機能します。

列インデックスが存在するときにこのエラーが発生する理由を誰かが説明できますか?

4

2 に答える 2

1

私のアドバイス?JVMを信じてください。あなたがどう思うかは問題ではありません。

何がうまくいかないのかを理解するのに適切な場所を見ていません。小さな自己完結型の例を作成し、デバッガーで実行します。そうすれば、コードがどこでうまくいかないかを確認できます。

于 2012-04-23T12:17:13.457 に答える
0

を使用したときにも同じエラーが発生しましたHibernate。ただし、例外は休止状態に依存しません。JDBCこの例外はバージョンまたはバージョンに依存してDatabaseいます。私のデータベースではオラクルであり、同じ例外が発生しました。理由は、ojdbc私が使用したバグでした。7Prepared Statementつ以上のパラメーターを渡すと、例外が発生しました。これはバグです。解決策は変化してojdbcいます。

于 2015-05-13T16:20:10.160 に答える