2017-09-04 42 views
0

我得到這個錯誤在日食附近更新查詢中的語法錯誤?在食,但在MySQL工作臺工作

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在''附近使用正確的語法'? ,登錄=? ,pwd =? WHERE登錄名= 'PP'」位於第1行

這是我的查詢在我的源代碼:

String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = '" + login2 + "'"; 

這是從我的方法在整個代碼:

private void modificar() { 
     // Prints the content of the table 
     String query = "SELECT * FROM usuarios"; 
     try { 
      pst = con.Conectar().prepareStatement(query); 
      rs = pst.executeQuery(query); 

      // Itarate over the registries 
      int i = 0; 
      while (rs.next()) { 
       i++; 
       //print them 
       System.out.println(i + " " + rs.getString("id") + " " + rs.getString("login")); 
      } 
      //There are X registries 
      System.out.println("Existen " + i + " usuarios actualmente"); 
      pst.close(); 

      //Wich registry do you need to modify? 
      System.out.println("Ingrese el login del usuarios a modificar"); 
      String login2 = scanner.nextLine(); 

      System.out.println("Ingrese datos a modificar"); 
      System.out.print("Nombre: "); 
      nombre = scanner.nextLine(); 
      System.out.print("Login: "); 
      login = scanner.nextLine(); 
      System.out.print("Password: "); 
      pwd = scanner.nextLine(); 

      String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = '" + login2 + "'"; 

      pst = con.Conectar().prepareStatement(query2); 
      pst.setString(1, nombre); 
      pst.setString(2, login); 
      pst.setString(3, pwd); 
      /* 
      * Aqui da error de sintaxis en query2 
      */ 
      pst.executeUpdate(query2); 
      pst.close(); 

      String query3 = "SELECT * FROM usuarios where login =" + login; 

      pst = con.Conectar().prepareStatement(query3); 
      rs = pst.executeQuery(query3); 
      rs.next(); 

      System.out.println("ahora quedo asi " + rs.getString("login")); 

     } catch (SQLException e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } finally { 
      cerrarConsultas(); 
     } 
    } 

但在MySQL Workbench中使用它時工作正常,這是我在工作臺中的測試。

prepare insertar from "UPDATE usuarios SET nombre = ?, login = ?, pwd = ? WHERE login = 'pp'"; 
-- "UPDATE usuarios SET nombre = ?, login = ?, pwd = ? WHERE login = 'pablo'"; 
set @nombre = 'pp'; 
set @login = 'pp'; 
set @pwd = 'pp'; 
execute insertar using @nombre, @login, @pwd; 
deallocate prepare insertar; 

我已經試過,甚至與字面qoutes,仍然無法正常工作。

String query2 = "UPDATE usuarios SET `nombre` = ? , `login` = ? , `pwd` = ? WHERE login = '" + login2 + "'"; 

也試過:

String query2 = "UPDATE usuarios SET `nombre` = ? , `login` = ? , `pwd` = ? WHERE login = "+ login2; 

相同的結果。

回答

1

更換 pst.executeUpdate(query2);pst.executeUpdate();

否則你最終會忽略參數綁定你用各種pst.setString(...)因此數據庫引擎將接收查詢與?,而不是你的意思是綁定的值一樣。

+0

哦親愛的上帝!我要用我的cruzer刀片usb棒自殺!...謝謝! –

0

爲什麼不使用WHERE子句的參數?

String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = ?"; 

pst = con.Conectar().prepareStatement(query2); 
pst.setString(1, nombre); 
pst.setString(2, login); 
pst.setString(3, pwd); 
pst.setString(4, login2); 
+0

我沒有使用它,因爲我得到的錯誤,我不知道問題出在哪裏。但現在很明顯,解決了......通過你的建議改進它。非常感謝你。 –