我正在尝试以下列方式将元组插入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();
具有相同的结果。我确信我必须做一些愚蠢的事,但我完全失去了。我在执行插入之前打印出字符串,但无法找到任何语法错误。任何帮助将不胜感激。
答案 0 :(得分:1)
条件是mysql中的保留字:请参阅Reserved words for mysql
只需重命名该属性即可执行
答案 1 :(得分:1)
扩展当前答案,因为“条件”是一个列名,并且表的修改可能不是一个选项,您可以在查询中引用条件 - 使用反引号或引号字符作为在前面提到的文件中描述。
权衡是你失去了可移植性,因为不是每个数据库都使用这个约定。如果可能,重命名列是最佳的长期选项。