Java如何将变量写入H2数据库
Posted
技术标签:
【中文标题】Java如何将变量写入H2数据库【英文标题】:Java How to write variable into H2 database 【发布时间】:2013-12-26 08:39:10 【问题描述】:我正在尝试将变量写入 H2 数据库,但它一直给我错误。下面的部分工作。
pstmt = conn.prepareStatement("INSERT INTO Cart (Number, Item, Quantity, Value) "
+"VALUES ('1','Book','5','10')");
pstmt.executeUpdate();
将值更改为变量后,它不再起作用。我已经用 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();
【问题讨论】:
【参考方案1】:改为:(如果数据库字段类型为字符串,则需要单引号)
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();
【讨论】:
@user2822351 是的,我描述的第二种方法是使用Parameterized Query
,其中我们使用?
作为值的占位符,并使用setXXX()
方法设置值。你可以阅读更多关于Parameterized Query
here【参考方案2】:
您的问题的直接答案是您正在创建的字符串将没有单引号。 (Bhushan 在另一个答案中显示了一种获取引号的方法。)
扩展的答案是“请不要以这种方式构造 SQL 查询。使用查询参数来避免 SQL 注入攻击。”
【讨论】:
以上是关于Java如何将变量写入H2数据库的主要内容,如果未能解决你的问题,请参考以下文章