0

我正在尝试以下列方式将元组插入到 mySQL 数据库中。

 String insertString = "INSERT INTO listings(Seller, Title, Close_Time, Price, Condition)"
                + " VALUES('"+par.getSellerName()+"', '"+par.getItemName()+"', "
                +closetime+", "+par.getPrice()+", '"+par.getCondition()+"')";

pst = con.prepareStatement(insertString);
pst.executeUpdate();
ResultSet rs = pst.getGeneratedKeys();

但我不断收到 SQL 语法错误。奇怪的是,如果我离开条件,我没有问题。在清单表中,Condition 是一个 varchar(45),par.getCondition() 返回一个字符串长度<45。

我也试过这个,比如:

pst = con.prepareStatement(
                    "INSERT INTO listings(Seller, Title, Close_Time, Price, Condition)"
                    + "VALUES(?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS);
pst.setString(1, par.getSellerName());
        pst.setString(2, par.getItemName());
        long closeTime = getTimeMills(par.getTimeOver());
        pst.setLong(3, closeTime);
        pst.setDouble(4, par.getPrice());
        pst.setString(5, par.getCondition());
        pst = con.prepareStatement(insertString);
        pst.executeUpdate();
        ResultSet rs = pst.getGeneratedKeys();

结果相同。我确定我一定是在做一些愚蠢的事情,但我完全不知所措。我在执行插入之前打印了字符串,但找不到任何语法错误。任何帮助将不胜感激。

4

2 回答 2

1

条件是mysql中的保留字:见mysql的保留

只需重命名该属性,它就会执行得很好

于 2012-09-30T18:35:19.943 回答
1

扩展当前答案,因为“条件”是列名,并且可能无法修改表,因此您可以在查询中引用条件 - 使用反引号或引号字符,如之前引用的文档。

权衡是您失去了可移植性,因为并非每个数据库都使用此约定。如果可能,重命名列是最好的长期选择。

于 2012-09-30T18:47:21.657 回答