亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

超出范圍的java.sql.SQLException參數索引(1>參數,即0)

超出范圍的java.sql.SQLException參數索引(1>參數,即0)

守候你守候我 2019-06-23 14:52:36
超出范圍的java.sql.SQLException參數索引(1>參數,即0)在對我選擇的組合框進行驗證后,我無法將它插入到我的數據庫中。Tomcat給出了以下錯誤:異常:參數索引超出范圍(1>參數,即0)。這是如何造成的,我如何解決呢?
查看完整描述

3 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

調用任何一個setXxx()方法PreparedStatement,而sql查詢字符串沒有任何占位符。?為了這個。

例如,這是不對:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, val1);
 // Fail.preparedStatement.setString(2, val2);preparedStatement.setString(3, val3);

您需要相應地修復SQL查詢字符串以指定占位符。

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, val1);preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

注意,參數索引以1你知道需要引用這樣的占位符:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

否則,仍然會得到相同的異常,因為SQL解析器會將它們解釋為實際的字符串值,因此無法找到占位符。

另見:


查看完整回答
反對 回復 2019-06-23
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

就像錯誤信息說的,$qSelect似乎不是一個物體。嘗試通過使用var_dump($qSelect);在你打電話之后。也檢查一下getDBH()還你需要的。

聽起來好像準備調用失敗了(不知道為什么),所以它會返回false - false不是一個對象,所以您不能調用bind_param()在那上面。

編輯:您沒有提供信息,但看起來您使用的是PHP的PDO。在這種情況下,請看一看文獻.

如果數據庫服務器成功地準備了該語句,PDO:prep()將返回一個PDOStatement對象。如果數據庫服務器無法成功地準備語句,則PDO:PRIMPLE()返回false或發出PDOException(取決于錯誤處理)。

您應該將服務器配置為返回那些PDO異常,這將告訴您準備調用失敗的原因。


查看完整回答
反對 回復 2019-06-23
?
森林海

TA貢獻2011條經驗 獲得超2個贊

嗯,原因之一prepare()如果發送給它的SQL語句在當前DB中無效,則可以失敗。

prepare()然后返回FALSE。

如果表名不正確或者查詢中的一個或多個字段不存在。.


查看完整回答
反對 回復 2019-06-23
  • 3 回答
  • 0 關注
  • 2332 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號