2013-09-29 102 views
-1

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法中有錯誤; 檢查對應於您的MySQL服務器版本的手冊,以在''firstName','lastName','email','address','userName','password'附近使用正確的語法)VALUES('nu'at line 1嘗試使用executeUpdate發出數據操作語句時出錯

我收到上述錯誤當我跑步時我的GUI將數據輸入到表中。

我用下面

+1

擺脫firstName,lastName等單引號。 –

+1

我認爲大衛的意思是,擺脫列名周圍的單引號;) – MadProgrammer

+1

密碼值旁邊缺少撇號:''「+ password +」)「);' – krokodilko

回答

1

試試看機翼的方式看執行之前的查詢,以找出錯誤:

public void Create(String first, String last, String email, String address, String username, String password) { 
     Connection conn = null; 
     PreparedStatement statement = null; 
     try { 
      Class.forName(JDBC_DRIVER).newInstance(); 
      conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); 

      StringBuilder query = new StringBuilder("INSERT INTO person(firstName, lastName, email, address, userName, password) VALUES(") 
       .append("'").append(first).append("',") 
       .append("'").append(last).append("',") 
       .append("'").append(email).append("',") 
       .append("'").append(address).append("',") 
       .append("'").append(username).append("',") 
       .append("'").append(password).append("'") 
       .append(")"); 

      System.out.println(query.toString()); 

      statement = conn.prepareStatement(query.toString()); 
      statement.executeUpdate(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 

      if (statement != null) { 
       statement.close(); 
      } 

      if (conn != null) { 
       conn.close(); 
      } 

     } 
    } 

你可以改變你的提交按鈕的功能是這樣的:

//action listeners for Login in button and menu item 
    submitButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      String fName = jtfFname.getText(); 
      String lName = jtfLname.getText(); 
      String email = jtfEmail.getText(); 
      String address = jtfAddress1.getText(); 
      String username = jtfUsername.getText(); 
      String password = jtfPassword.getText(); 

      Create(fName , lName, email, address, username, password); 
     } 
    }); 
+0

嗨,歡呼我怎麼能用我的gui來實現這個功能來獲取jtextfields? – Hayde

+0

根據您的要求進行了修改 –

+0

查看最新的編輯。是您要求的嗎? –

0

你在最後的陳述中缺少'的代碼。您的發言應該喜歡:

PreparedStatement statement = 
conn.prepareStatement("INSERT INTO person ('firstName', 'lastName', 'email', 
         'address', 'userName', 'password') " 
        + "VALUES ('" + first + "', '" + last + "', '" + email + "', 
     '" + address + "', '" + username + "', '" + password + "')"); 
1

不要以這種方式使用準備好的聲明。您的代碼易受SQL注入攻擊。

在使用這種方法制備的語句:

PreparedStatement statement = conn.prepareStatement(
      "INSERT INTO person (firstName, lastName, email, address, userName, password) " 
      + "VALUES (? , ?, ?, ?, ?, ?)"; 
     statement.setString(1, first); 
     statement.setString(2, last); 
     statement.setString(3, email); 
     statement.setString(4, address); 
     statement.setString(5, username); 
     statement.setString(6, password); 
     statement.executeUpdate(); 

這也從愚蠢的錯誤一樣失蹤撇號防止。

這裏是一個教程how to use PreparedStatementhttp://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

+0

爲此乾杯,我該如何做到這一點,所以我的GUI可以實現這一點。 – Hayde

+0

只需將此示例複製並粘貼到您的代碼中,即可工作。 – krokodilko

相關問題