为什么我的SQL中出现运行时错误,提示语法错误?

时间:2018-07-28 09:29:03

标签: java mysql sql

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

我收到语法错误提示

  

错误java.sql.SQLSyntaxErrorException:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在'desc,size,cost,quantity,date)值('sam','FH','Fishing Hooks','#2','2第1行的','2','7 /'

我找不到我的错误

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

insert语句本身是

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

  <xsl:key name="map" 
    match="Message1/Response/CE//*[action = 'New']"
    use="concat(ancestor::CE/id, '|', node-name(.), '|', count((., preceding-sibling::*[node-name(.) = node-name(current())])))"/>

    <xsl:template match="Messages">
        <xsl:apply-templates select="Message2"/>
    </xsl:template>

    <xsl:template match="Message2">
        <Response>
            <xsl:apply-templates select="Response/*"/>
        </Response>
    </xsl:template>

  <xsl:template match="Message2/Response/CE//*[key('map', concat(ancestor::CE/id, '|', node-name(.), '|', count((., preceding-sibling::*[node-name(.) = node-name(current())]))))]">
      <xsl:copy-of select="key('map', concat(ancestor::CE/id, '|', node-name(.), '|', count((., preceding-sibling::*[node-name(.) = node-name(current())]))))"/>
  </xsl:template>

</xsl:transform>

请注意,insert into purchase(username,code,desc,size,cost,quantity,date) values(?,?,?,?,?,?,?) 是保留关键字。

您需要对其进行转义或更改其名称。优良作法是无论如何都要转义所有列名,因此将insert语句更改为:

desc

还应该使用与其数据类型相对应的方法来设置参数。给定您的代码,而不是insert into purchase(`username`,`code`,`desc`,`size`,`cost`,`quantity`,`date`) values (?,?,?,?,?,?,?) 到处都是setString,将setInt用作整数值costqnty