【问题标题】:Getting Java mysql SQL Syntax error but my query seems normal获取 Java mysql SQL 语法错误,但我的查询似乎正常
【发布时间】:2019-03-03 17:19:25
【问题描述】:

我正在开发一个简单的基于 java mysql 的应用程序,在将数据插入数据库期间,我遇到了下面提到的 SQL 错误。

这是我的代码:

public DBConnection() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase?useUnicode=true&useLegacyDatetimeCode=false&serverTimezone=Turkey", "root", "");

        st = con.createStatement();

        System.out.println("CONNECTED!");

    } catch (Exception e) {
        System.out.println("Error  : " + e);
    }
}

public void addCustomer(String name, String surname, String company, String adress, String adressTwo){

  String addQuery = "insert into musteri (name,surname,company,adress,adressTwo) values (?,?,?,?,?)" ;

  try {
      st.executeUpdate(addQuery);
  System.out.println("Data Added");
  } catch (Exception e) {
      System.out.println("Error occured when adding value to database : " + e );
  }
}

这是我添加数据的 java main 方法:

public static void main(String[] args) {
    // TODO code application logic here


    Customers c1 = new Customers();

    c1.setIsim("test");
    c1.setSoyisim("test");
    c1.setSirket("test");
    c1.setAdres("test");
    c1.setIletisim("test");

    DBConnection db = new DBConnection();

    db.addCustomer(c1.isim, c1.soyisim, c1.sirket, c1.adres, c1.iletisim);
}


我得到的错误是:

向数据库添加值时发生错误:java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的“插入 musteri (ad,soyad,sirket,adres,iletisim) 值 (?,?,?,?,?)'' 附近使用

【问题讨论】:

  • 你设置preparedstatement参数了吗?
  • 另外我建议将语句创建为方法中的局部变量,而不是重新使用某些类成员或全局变量
  • 是的,我准备好了。顺便说一句,当我添加正常值而不是?它工作正常。
  • 显示addCustomer 的完整代码,包括您设置参数的位置
  • 发布错误“插入musteri(广告,大豆...”匹配发布的代码“插入musteri(姓名,姓氏...” - 也错过了设置参数(如addQuery.setString(...

标签: java mysql jdbc syntax-error sql-insert


【解决方案1】:

您将语句与准备好的语句混合在一起。您应该使用准备好的语句并为其设置值:

public void addCustomer(String name, String surname, String company, String address, String adressTwo) {
    String addQuery = "insert into musteri (name, surname, company, adress, adressTwo) values (?,?,?,?,?)" ;

    // Shown here for simplicitly.
    // The query could be prepared once and stored in a data member
    try (PreparedStatement ps = con.prepareStatement(addQuery)) {
        ps.setString(1, name);
        ps.setString(2, surname);
        ps.setString(3, company);
        ps.setString(4, address);
        ps.setString(5, addressTwo);
        ps.executeUpdate();
        System.out.println("Data Added");
    } catch (Exception e) {
        System.out.println("Error occured when adding value to database : " + e );
    }
}

【讨论】:

  • 它有效。非常感谢!现在我明白了我的错误。感谢关注。
【解决方案2】:

我建议你像这样实现addCustomer。使用本地 Statement 并使用 try-with-resource 样式创建它,然后为查询设置参数

public void addCustomer(String name, String surname, String company, String adress, String adressTwo){
    String addQuery = "insert into musteri (name,surname,company,adress,adressTwo) values (?,?,?,?,?)" ;

    try (PreparedStatement stmt = con.prepareStatement(addQuery)) {
        stmt.setString(1, name);
        stmt.setString(2, surname);
        stmt.setString(3, company);
        stmt.setString(4, adress);
        stmt.setString(5, adressTwo);
        stmt.executeUpdate();
        System.out.println("Data Added");
    } catch (Exception e) {
        System.out.println("Error occured when adding value to database : " + e );
    }
}

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2016-11-29
    • 2015-06-03
    • 2021-02-27
    相关资源
    最近更新 更多