我正在生成一个表并将数据插入到该表中。该表是根据具有复杂关系的数据创建的。我们创建了这个功能,因此我们的BI工具的用户可以轻松处理数据。PreparedStatement抛出索引超出范围时,它不超出范围
根据用户生成的数据,我们有一堆创建的表中的每一个都是不同的。在一种情况下,我们正在索引超出范围的例外。在检查元数据时,它没有超出范围。
确切异常消息是:
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 =假
当它失败我从插入语句打印出来的元数据和得到这个:
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
当我尝试设置列索引13时,我得到索引超出范围,但根据它存在的元数据!如果它不存在,我会得到另一个超出范围的异常。
相同的代码适用于不同的数据集。
任何人都可以解释为什么当列索引存在时会发生此错误吗?
您是否尝试使用基于零的索引?如果不是这样,你应该发布你用来构建语句的确切代码并执行它。 – 2012-04-23 12:09:13
@MarkoTopolnik Java的'PreparedStatement'中的索引是基于1的,所以我不认为这是造成问题的原因。 – Jesper 2012-04-23 12:13:16
@Jesper没有任何代码,它是猜测究竟发生了什么。可能会有间歇性代码从1转换为0,或者上帝知道还有什么。 – 2012-04-23 12:16:47