com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法中有錯誤; 檢查對應於您的MySQL服務器版本的手冊,以在''firstName','lastName','email','address','userName','password'附近使用正確的語法)VALUES('nu'at line 1嘗試使用executeUpdate發出數據操作語句時出錯
我收到上述錯誤當我跑步時我的GUI將數據輸入到表中。
我用下面
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法中有錯誤; 檢查對應於您的MySQL服務器版本的手冊,以在''firstName','lastName','email','address','userName','password'附近使用正確的語法)VALUES('nu'at line 1嘗試使用executeUpdate發出數據操作語句時出錯
我收到上述錯誤當我跑步時我的GUI將數據輸入到表中。
我用下面
試試看機翼的方式看執行之前的查詢,以找出錯誤:
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);
}
});
你在最後的陳述中缺少'
的代碼。您的發言應該喜歡:
PreparedStatement statement =
conn.prepareStatement("INSERT INTO person ('firstName', 'lastName', 'email',
'address', 'userName', 'password') "
+ "VALUES ('" + first + "', '" + last + "', '" + email + "',
'" + address + "', '" + username + "', '" + password + "')");
不要以這種方式使用準備好的聲明。您的代碼易受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 PreparedStatement
:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
爲此乾杯,我該如何做到這一點,所以我的GUI可以實現這一點。 – Hayde
只需將此示例複製並粘貼到您的代碼中,即可工作。 – krokodilko
擺脫firstName,lastName等單引號。 –
我認爲大衛的意思是,擺脫列名周圍的單引號;) – MadProgrammer
密碼值旁邊缺少撇號:''「+ password +」)「);' – krokodilko