我正在生成一个表并将数据插入该表。该表是根据具有复杂关系的数据创建的。我们创建了这个,因此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,但是根据它存在的元数据!如果它不存在,我会得到另一个超出范围的例外。
相同的代码适用于不同的数据集。
有人可以解释为什么列索引存在时会发生此错误吗?
答案 0 :(得分:1)
我的建议?相信JVM。你的想法并不重要。
你没有找到合适的位置来了解出了什么问题。编写一个小的,自包含的示例并在调试器中运行它。你将能够看到代码在哪里出错。
答案 1 :(得分:0)
当我使用Hibernate
时,同样的错误也发生在我身上。但异常并不依赖于休眠。此异常取决于JDBC
或Database
版本。在我的数据库中是oracle并且得到了相同的异常.Reason是我使用的ojdbc
错误。在Prepared Statement
如果我传递了超过7个参数,我就得到了异常。这是一个错误。解决方案正在改变ojdbc
。