我試圖在Java 7中使用Java PreparedStatement
使用下面的代碼執行SQL
查詢:的Java的PreparedStatement:com.microsoft.sqlserver.jdbc.SQLServerException,指數超出範圍
PreparedStatement functionalCRsStatement = con.prepareStatement(
"select * from openquery(SERVER,\n" +
"\t'Select X , Y, Z, A from D r\n" +
"\tINNER JOIN E c\n" +
"\tON r.RNID = c.RNID\n" +
"\twhere c.Y = ?')\n");
functionalCRsStatement.setString(2, x);
我得到以下錯誤消息:com.microsoft.sqlserver.jdbc.SQLServerException: The index 2 is out of range.
PS:我確信SQL查詢的正確性,因爲我成功地在沒有PreparedStatement
的情況下對其進行測試,我只是用僞造的字符串替換了查詢中列的真實名稱(X, Y,Z)隱藏潛在的機密信息。
編輯:使用setString(1, x)
=>index 1 is out of range
您試圖設置第二個參數的值,但您只有一個需要設置的參數。另外,'st'的目的是什麼?你似乎沒有做任何事情。您也不需要在準備好的語句中「美化」SQL - 從代碼的角度輕鬆讀取,而不用亂七八糟的標籤和換行符亂扔查詢字符串。 – JonK
'索引2超出範圍'解釋它。你應該用'1'來代替。 – Abubakkar
我實際上首先嚐試了'1',並且得到了同樣的錯誤'索引1超出範圍' – Platus