当PreparedStatement抛出索引不在范围之外时,它超出范围

时间:2012-04-23 12:06:30

标签: java sql-server jdbc

我正在生成一个表并将数据插入该表。该表是根据具有复杂关系的数据创建的。我们创建了这个,因此BI工具的用户可以轻松处理数据。

根据用户生成的数据,我们创建了一堆这些表,每个表都是不同的。在一种情况下,我们将索引超出范围异常。检查元数据时,它不会超出范围。

确切的异常消息是:

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

生成的insert语句为:

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

当设置了见证的事件值时,抛出异常。当要设置该值时,我打印了列索引和值:

  

13:AccidentWitnessed = false

当它失败时,我从insert语句中打印出元数据,并得到了这个:

parameterMetaData.getParameterCount()= 13

ColIndex - 类型||类

1 - int || java.lang.Integer中

2 - int || java.lang.Integer中

3 - int || java.lang.Integer中

4 - datetime ||的java.sql.Timestamp

5 - datetime ||的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索引13时,我得到Index Out Of Range,但是根据它存在的元数据!如果它不存在,我会得到另一个超出范围的例外。

相同的代码适用于不同的数据集。

有人可以解释为什么列索引存在时会发生此错误吗?

2 个答案:

答案 0 :(得分:1)

我的建议?相信JVM。你的想法并不重要。

你没有找到合适的位置来了解出了什么问题。编写一个小的,自包含的示例并在调试器中运行它。你将能够看到代码在哪里出错。

答案 1 :(得分:0)

当我使用Hibernate时,同样的错误也发生在我身上。但异常并不依赖于休眠。此异常取决于JDBCDatabase版本。在我的数据库中是oracle并且得到了相同的异常.Reason是我使用的ojdbc错误。在Prepared Statement如果我传递了超过7个参数,我就得到了异常。这是一个错误。解决方案正在改变ojdbc