获取Java mysql SQL语法错误,但我的查询似乎正常

获取Java mysql SQL语法错误,但我的查询似乎正常,java,mysql,jdbc,syntax-error,sql-insert,Java,Mysql,Jdbc,Syntax Error,Sql Insert,我正在开发一个简单的基于JavaMySQL的应用程序,在将数据插入数据库的过程中,我遇到了下面提到的SQL错误 这是我的密码: public DBConnection() { try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase?useUnicode=true&us

我正在开发一个简单的基于JavaMySQL的应用程序,在将数据插入数据库的过程中,我遇到了下面提到的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);
    }
}
下面是我添加数据的java主方法:

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)值(?、、?、?)”附近使用的正确语法


我建议您像这样实施
addCustomer
。使用本地
语句
并使用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 );
    }
}

你把陈述和准备好的陈述混为一谈。您应该使用准备好的语句并为其设置值:

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 );
    }
}

您是否设置了preparedstatement参数?另外,我建议将语句创建为方法中的局部变量,而不是重复使用某些类成员或全局变量是的,我在添加正常值时设置了prepared st.Btw,而不是?其工作正常。显示
addCustomer
的完整代码,包括设置参数的位置所显示的错误“insert into musteri(ad,soyad…”与发布的代码不匹配“insert into musteri(name,姓氏…”-还缺少参数设置(如
addQuery.setString(…
)非常感谢!现在我明白我的错误了。谢谢大家的关注。
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 );
    }
}