Java如何将变量写入H2数据库

时间:2013-12-26 08:39:11

标签: sql database jdbc h2

我正在尝试将变量写入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();

2 个答案:

答案 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注入攻击。”