首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JDBC PreparedStatement executeQuery 傳參導致 SQL 語法錯誤的正確姿勢

     編輯:程式設計綜合問答

錯誤現象

調試時發現每次執行到 while(rs.next()) 就跳入異常塊,錯誤信息:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and t.colpas=?' at line 1

問題代碼

ResultSet rs = ps.executeQuery(sql); // sql 仍包含佔位符 ?

原因分析

PreparedStatement.executeQuery() 不接受 SQL 字符串參數。調用帶參重載時,驅動會嘗試再次解析含 ? 的 SQL,導致語法錯誤。正確做法是先 ps.setXxx(...) 綁定參數,再調用無參的 executeQuery()。

修正代碼

ps.setString(1, param1);
ps.setString(2, param2);
ResultSet rs = ps.executeQuery(); // 無參版本

修改後即可正常查詢並遍歷結果集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved