我正在尝试将变量写入H2数据库,但它一直给我错误。下面的部分工作。
pstmt = conn.prepareStatement("INSERT INTO Cart (Number, Item, Quantity, Value) "
+"VALUES ('1','Book','5','10')");
pstmt.executeUpdate();
将Value更改为变量后,它不再起作用了。我已经用SQL测试了它,但是在H2数据库中没有。任何人都知道我怎么能让它工作?
String Number = "2";
String Item = "Fruit";
String Quantity = "10";
String Value = "2";
pstmt = conn.prepareStatement("INSERT INTO Cart (Number, Item, Quantity, Value) "
+"VALUES ("+Number+","+Item+","+Quantity+","Value+")");
pstmt.executeUpdate();
答案 0 :(得分:3)
将其更改为:(如果数据库字段类型为字符串,则需要单引号)
pstmt = conn.prepareStatement("INSERT INTO Cart (Number, Item, Quantity, Value) "
+"VALUES ('"+Number+"','"+Item+"','"+Quantity+"','"Value+"')");
我建议您使用parameterised queries
来避免SQL Injection
使用Parameterised statements
:
pstmt = conn.prepareStatement("INSERT INTO Cart (Number, Item, Quantity, Value) "
+"VALUES (?,?,?,?)");
pstmt.setString(1,Number);
pstmt.setString(2,Item);
pstmt.setString(3,Quantity);
pstmt.setString(4,Value);
pstmt.executeUpdate();
答案 1 :(得分:2)
您问题的直接答案是您创建的字符串没有单引号。 (Bhushan在另一个答案中显示了一种获取引号的方法。)
扩展答案是“请不要以这种方式构造SQL查询。使用查询参数来避免SQL注入攻击。”