【问题标题】:Why do I get a runtime error saying syntax error in my sql? [duplicate]为什么我的 sql 中出现运行时错误,提示语法错误? [复制]
【发布时间】:2018-07-28 17:38:26
【问题描述】:
desc = "Fishing Hooks";
code = "FH";
size = "#2";
cost = 2;
qnty = Integer.parseInt(hook2amount.getText());
amnt = qnty * cost;
Products h2 = new Products(desc,code,size,cost,qnty,amnt);
list.add(h2);
try {
    Class.forName("com.mysql.jdbc.Driver");

    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
    pst = con.prepareStatement("insert into purchase(username,code,desc,size,cost,quantity,date) values(?,?,?,?,?,?,?)");
    pst.setString(1, user);
    pst.setString(2, code);
    pst.setString(3,desc);
    pst.setString(4,size);
    pst.setString(5, String.valueOf(cost));
    pst.setString(6, String.valueOf(qnty));
    pst.setString(7, date);
    pst.executeUpdate();

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

我收到一个语法错误提示

Error java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'desc,size,cost,quantity,date) values('sam','FH','Fishing Hooks','#2','2 附近使用的正确语法','2','7/' 在第 1 行

我找不到我的错误

【问题讨论】:

    标签: java mysql sql


    【解决方案1】:

    desc 是 MariaDB 中的保留关键字,在它周围加上一些反引号,它应该可以工作。

    【讨论】:

    • 通过解决该错误我得到另一个错误说错误 com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect date value: '7/28/2018' for column 'date' at第 1 行
    【解决方案2】:

    插入语句本身就是

    insert into purchase(username,code,desc,size,cost,quantity,date) values(?,?,?,?,?,?,?)
    

    注意desc 是保留关键字。

    您需要对其进行转义或更改其名称。无论如何,最好对所有列名进行转义,因此将插入语句更改为:

    insert into purchase(`username`,`code`,`desc`,`size`,`cost`,`quantity`,`date`) values (?,?,?,?,?,?,?)
    

    您还应该使用与其数据类型对应的方法来设置参数。根据您的代码,对于整数值 costqnty,而不是到处使用 setString

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多