mysql教學 - sql connector java



當嘗試執行PreparedStatement時,MySQLSyntaxErrorException接近“?” (1)

我正在嘗試使用Java中的PreparedStatement執行查詢。

當我嘗試執行我的查詢(語法錯誤)時,我得到錯誤號1064。

我已經在MySQL查詢瀏覽器中使用替代值進行了測試,效果很好。

我的代碼有什麼問題?

以下是相關的代碼:

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query);

這是我得到的異常:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法錯誤; 檢查與你的MySQL服務器版本相對應的手冊,在正確的語法附近使用'? 或者MemberName =? 在第1行


com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法錯誤; 檢查與你的MySQL服務器版本相對應的手冊,在正確的語法附近使用'? 或者MemberName =? 在第1行

MySQL不理解的含義? 在SQL查詢中。 這的確是無效的SQL語法。 所以它不會被PreparedStatement取代。 你猜怎麼著?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

您正在使用原始查詢覆蓋準備好的查詢! 您需要調用無爭議的PreparedStatement#executeQuery()方法而不是Statement#executeQuery(String)

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

無關的問題,你的代碼洩漏資源。 數據庫將在幾個小時後用完,你的應用程序將崩潰。 為了解決這個問題,你需要遵循在ResultSet它們的try塊的finally塊中關閉ConnectionStatementResultSet的JDBC方法。 查看JDBC基礎教程以獲取更多詳細信息。





jdbc