JDBC数据库访问,插入元组

时间:2012-09-30 18:33:36

标签: java mysql

我正在尝试以下列方式将元组插入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()返回一个String长度<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();

具有相同的结果。我确信我必须做一些愚蠢的事,但我完全失去了。我在执行插入之前打印出字符串,但无法找到任何语法错误。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

条件是mysql中的保留字:请参阅Reserved words for mysql

只需重命名该属性即可执行

答案 1 :(得分:1)

扩展当前答案,因为“条件”是一个列名,并且表的修改可能不是一个选项,您可以在查询中引用条件 - 使用反引号或引号字符作为在前面提到的文件中描述。

权衡是你失去了可移植性,因为不是每个数据库都使用这个约定。如果可能,重命名列是最佳的长期选项。