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 Queryhere【参考方案2】:

您的问题的直接答案是您正在创建的字符串将没有单引号。 (Bhushan 在另一个答案中显示了一种获取引号的方法。)

扩展的答案是“请不要以这种方式构造 SQL 查询。使用查询参数来避免 SQL 注入攻击。”

【讨论】:

以上是关于Java如何将变量写入H2数据库的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot / H2 将数据库快照写入文件系统

H2数据库存储在哪里?

为啥 H2 进行 spring-boot 测试,但它会将数据写入我的本地 mysql 数据库?

如果一个线程写入和一个读取,H2 数据库开始抛出异常

如何从 Java 和 H2 DB 连接到 H2 数据库

如何在h2o数据框中添加新的分类变量