Это все сообщение, которое я получаю:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с значениями '' user ',' age ',' school ',' password ') (' Admin ',' 22 ',' tei ',' admin ')' в строке 1

А это код:

String user = textField.getText().trim();
String age = textField_3.getText().trim();
String school = textField_4.getText().trim();
String password = String.valueOf(passwordField.getPassword());
String password1 = String.valueOf(passwordField_1.getPassword());

if(password.equals(password1)){


Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/users","root","1234");
PreparedStatement st = con.prepareStatement("insert into user ('user','age','school','password') values ('"+user+"','"+age+"','"+school+"','"+password+"')");
int rs = st.executeUpdate();

JOptionPane.showMessageDialog(frame, "Data Saved Successfully");

Любые идеи?

4
pap 18 Янв 2014 в 20:57

1 ответ

Лучший ответ

Суть подготовленных операторов, помимо прочего, в том, чтобы не объединять ваши запросы самостоятельно.

Вы хотите сделать следующее:

//first you "prepare" your statement (where the '?' acts as a kind of placeholder)
PreparedStatement st = con.prepareStatement("insert into user (user,age,school,password) values (?,?,?,?);");
//now you bind the data to your parameters
st.setString(1, user);
...
//and then you can execute it
st.executeUpdate()

Дополнительные сведения см. В официальном руководстве.

За кулисами происходит несколько вещей, которые делают запрос безопасным, например, экранирование специальных символов, которые в противном случае позволили бы изменить оператор (инъекции Google SQL, если вы хотите узнать больше)

5
kmera 18 Янв 2014 в 21:20
Я снова получаю то же сообщение! : /
 – 
pap
18 Янв 2014 в 21:09
Попробуйте удалить 'из имен столбцов, это поможет?
 – 
kmera
18 Янв 2014 в 21:12
Вы забываете точку с запятой в конце оператора.
 – 
jmsalcido
18 Янв 2014 в 21:13
Теперь я получаю еще одну ошибку: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'user' in 'field list'
 – 
pap
18 Янв 2014 в 21:14
1
Я нашел это! Connection con = DriverManager.getConnection ("jdbc: mysql: // localhost: 3306 / users", "root", "1234"); PreparedStatement st = (PreparedStatement) con.prepareStatement ("ВСТАВИТЬ пользователя (имя пользователя, возраст, школа, пароль) ЗНАЧЕНИЯ (?,?,?,?)"); st.setString (1, пользователь); st.setString (2, возраст); st.setString (3, школа); st.setString (4, пароль); st.executeUpdate (); st.close (); con.close ();
 – 
pap
19 Янв 2014 в 03:46