2015-10-28 60 views
2

,當我嘗試運行程序MySQL和JDBC PreparedStatement的使用選擇

異常 Caughtcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException我得到這個異常:您 在你的SQL有一個錯誤句法;檢查與您的MySQL服務器版本 相對應的手冊,以獲得在''附近使用的正確語法'?並通過 =?'在第1行

當我硬代碼值我得到正確的結果。例如:SELECT name, pass from servlettutorial.logintable where name = 'Bill' and pass = 'Gates'運行得很好。

上述程序中的SQL語法有什麼問題?

try{ 
       Class.forName("com.mysql.jdbc.Driver"); 
       Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/servlettutorial?" 
         + "user=root&password=carinov"); 

       String sql = "SELECT name, pass from servlettutorial.logintable where name = ? and pass = ?"; 
       PreparedStatement stmt = conn.prepareStatement(sql); 

       stmt.setString(1, serv_name); 
       stmt.setString(2,serv_pass); 

       ResultSet rs = stmt.executeQuery(sql); 

       while (rs.next()) { 

        String d_name = rs.getString("name"); 
        String d_pass = rs.getString("pass"); 

        if(d_name.equals(serv_name) && (d_pass.equals(serv_pass))) 
        { 
          found_match=1; 
          break; 
        } 
       } 

回答

0

您應該將SQL查詢不傳遞給executeQuery(),因爲PreparedStatement已經包含了查詢和參數。

變化

ResultSet rs = stmt.executeQuery(sql) 

ResultSet rs = stmt.executeQuery(); 
+0

由於一噸。它解決了這個問題:) – Cafe

+0

@Cafe不客氣 – Eran

相關問題