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:事故见证=假

当它失败时,我从插入语句中打印出元数据并得到以下信息:

参数MetaData.getParameterCount()=13

ColIndex - 类型 || 班级

1 - 整数 || java.lang.Integer

2 - 整数 || java.lang.Integer

3 - 整数 || java.lang.Integer

4 - 日期时间 || java.sql.时间戳

5 - 日期时间 || java.sql.时间戳

6 - nvarchar || java.lang.String

7 - 整数 || java.lang.Integer

8 - nvarchar || java.lang.String

9 - nvarchar || java.lang.String

10 - 整数 || java.lang.Integer

11 - nvarchar || java.lang.String

12 - 整数 || 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. 但是异常不依赖于休眠。此异常取决于版本。在JDBCDatabase的数据库中是 oracle 并且得到了相同的异常。原因是ojdbc我使用的错误。如果Prepared Statement我传递了超过 7 个参数,我得到了异常。这是一个错误。解决方案正在改变ojdbc

于 2015-05-13T16:20:10.160 回答