我正在生成一個表並將數據插入到該表中。該表是根據具有複雜關係的數據創建的。我們創建了這個功能,因此我們的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