【问题标题】:I am getting a Sql Syntax error while performing update query in java( java.sql.sqlsyntaxerrorexception you have an error in your sql syntax)在 java 中执行更新查询时出现 Sql 语法错误(java.sql.sqlsyntaxerrorexception,您的 sql 语法有错误)
【发布时间】:2020-09-21 03:14:04
【问题描述】:

ERROR=(java.sql.SQL.SyntaxErrorException: 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 '?、Last_Name=?、Contact=? 附近使用的正确语法。 , Email_ID=? WHERE Username=aman036' 在第 1 行)

我是编程初学者,因此我们将不胜感激。这是我的代码:-

   Connection Con=null;
   PreparedStatement pst=null;
   ResultSet rs=null;

    String query="UPDATE cashier SET First_Name=?, Last_Name=?, Contact=?, Email_ID=?  WHERE Username=?";
    try{
        Class.forName("com.mysql.cj.jdbc.Driver");
        Con=DriverManager.getConnection("jdbc:mysql://localhost/billing","Aman","Amanbhattt");
        pst=Con.prepareStatement(query);
        pst.setString(1,NameField.getText());
        pst.setString(2,LastNameField.getText());
        pst.setString(3,ContactField.getText());
        pst.setString(4,EmailField.getText());
        pst.setString(5,UsernameField.getText());
        pst.executeUpdate(query);
        JOptionPane.showMessageDialog(null,"Data Updated Successfully");
        Con.close();

【问题讨论】:

  • 你能分享更多的错误信息吗,因为你的代码看起来不错。
  • java.sql.SQL.SyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 '?、Last_Name=?、联系人附近使用的正确语法=?, Email_ID=? WHERE Username=aman036' 在第 1 行
  • 我真的很困惑。
  • 请提供minimal reproducible example,以及整个错误输出。见How to Askhelp center
  • @Aman 你能分享完整的错误轨迹吗?

标签: java mysql prepared-statement


【解决方案1】:

@阿曼

我没有得到您的完整错误,但从您的代码中我发现您没有处理代码中的 sql 特殊字符。您需要为您的 sql 查询添加转义字符。

MySQL server version for the right syntax to use near '?, Last_Name=?, Contact=?, Email_ID=? WHERE Username=aman036' 

在您的错误消息中,我可以看到用户名附加了单引号 aman036',因此您需要将其删除。

请使用以下代码删除您的 sql 查询字符串中的特殊字符

public String escapeMetaCharacters(String inputString){
    final String[] metaCharacters = {"\\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%"};

    for (int i = 0 ; i < metaCharacters.length ; i++){
        if(inputString.contains(metaCharacters[i])){
            inputString = inputString.replace(metaCharacters[i],"\\"+metaCharacters[i]);
        }
    }
    return inputString;
}

String query="UPDATE cashier SET First_Name=?, Last_Name=?, Contact=?, Email_ID=?  WHERE Username=?";
try{
    Class.forName("com.mysql.cj.jdbc.Driver");
    Con=DriverManager.getConnection("jdbc:mysql://localhost/billing","Aman","Amanbhattt");
    pst=Con.prepareStatement(query);
    pst.setString(1,escapeMetaCharacters(NameField.getText()));
    pst.setString(2,escapeMetaCharacters(LastNameField.getText()));
    pst.setString(3,escapeMetaCharacters(ContactField.getText()));
    pst.setString(4,escapeMetaCharacters(EmailField.getText()));
    pst.setString(5,escapeMetaCharacters(UsernameField.getText()));
    pst.executeUpdate(query);
    JOptionPane.showMessageDialog(null,"Data Updated Successfully");
    Con.close();

我知道prepared Statement不需要特殊字符处理。但有时它也发生在准备好的声明中。所以请试试这个,让我知道问题解决与否

希望对你有帮助,谢谢

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 2017-09-07
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多