目前我正在编写一个JDBC应用程序来管理MySQL数据库。我有删除,插入和选择方法与正确的查询一起运行。我遇到了Update方法的问题。使用以下代码时,我收到MySQL错误:
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行“”,“街道”,“城镇”,“城市”,“邮政编码”,“年龄”,电子邮件“,”运行Fee'false“,其中PID =”附近使用正确的语法。 ..
private void updateData()
{
Connection con;
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost/snr","root","");
String sql = "Update participant Set password='"+txtpassword.getText()+"'," +
"lastName='"+txtlastName.getText()+"',firstName='"+
txtfirstName.getText()+"',HouseNumber'"+txtHouseNumber.getText()+"',Street'"+txtStreet.getText()+"',Town'"+txtTown.getText()+"',City'"+txtCity.getText()+"',PostCode'"+txtPostCode.getText()+"',Age'"+txtAge.getText()+"',email'"+txtemail.getText()+"',RunningFee'"+cbRunningFee.isSelected()+"' Where PID='"+txtPID.getText()+"'";
Statement statement = con.createStatement();
statement.execute(sql);
createMessageBox("Updated Successfully");
clearControls();
}
catch(Exception e)
{
createMessageBox(e.getMessage());
}
}
我的SQL查询有问题吗?
答案 0 :(得分:4)
是的,您的查询错误。您在一大堆=
列/值对上遗漏了set
。
(并且请考虑使用预准备语句和绑定变量,SQL注入不是你想要开放的东西。)
答案 1 :(得分:2)
您的查询不仅不正确,而且还可能会向您开放SQL Interjection Attacks。
您需要parameterize您的查询,方法是将粘贴的值替换为问号,准备语句并执行它。请参阅我链接的教程。
最后,将密码存储为纯文本是一个非常非常糟糕的主意。
String sql = "UPDATE participant SET "+
"password=?, lastName=?, firstName=?, HouseNumber=?, Street=?, Town=?, "+
"City=?,PostCode?,Age=?,email=?,RunningFee=? "+
"WHERE PID=?";
PreparedStatement upd = con.prepareStatement(sql);
upd.setString(1, txtpassword.getText());
upd.setString(2, txtlastName.getText());
// ... and so on
upd.executeUpdate();
con.commit();
答案 2 :(得分:2)
是的,查询有问题。构建查询的方式容易受到SQL注入攻击。使用参数化查询而不是像这样连接文本。
答案 3 :(得分:1)
您在查询中遗忘了一些=
。
尝试
String sql = "Update participant Set password='"+txtpassword.getText()+"'," +
"lastName='"+txtlastName.getText()+"',firstName='"+
txtfirstName.getText()+"',HouseNumber='"+txtHouseNumber.getText()+"',Street='"+
txtStreet.getText()+"',Town='"+txtTown.getText()+"',City='"+txtCity.getText()+
"',PostCode='"+txtPostCode.getText()+"',Age='"+txtAge.getText()+"',email='"+
txtemail.getText()+"',RunningFee='"+cbRunningFee.isSelected()+
"' Where PID='"+txtPID.getText()+"'";
答案 4 :(得分:1)
错误“您的SQL语法中有错误”来自sql server并指出是,您的查询中确实有错误。在这些情况下,我经常发现打印构造的查询本身很有用,只是为了检查它是否正确构造。
在你的情况下,我认为问题是你缺少一堆“=”,你也可能需要在java中转义单引号,以便它们正确传递(替换'with \')。< / p>