【问题标题】:SQL-Escaping and bulk-insert in JavaJava 中的 SQL 转义和批量插入
【发布时间】:2012-04-02 19:58:42
【问题描述】:

我的目标是在批量插入查询中进行 sql 转义。 例如:

INSERT INTO log VALUES (0,5,-7,'str'), (4,0,0,'str'), (0,0,0,'str');

代码每 30 秒在表中插入大约 100-200 条记录。 (日志池)。
我没有找到使用 PreparedStatement 进行批量插入的方法,所以我不得不通过 StringBuilder 手动构建该查询。
但我不知道如何转义字符串,不太想应用诸如 kludge-fixes 之类的东西(引号通过 regex-replace 等转义)。

有什么方便的方法吗?

【问题讨论】:

  • 如果您不使用 PreparedSQL,您将面临很高的风险......
  • 我认为这个关于使用 PreparedStatement 进行批量插入的答案是您正在寻找的:stackoverflow.com/a/6892457/1272477
  • mguymon,可能这就是解决方案。我错过了这个。顺便说一句,这个 addBatch/executeBatch 是像上面的例子那样批量插入,还是一次性执行的一组 INSERT 查询?

标签: java sql escaping bulkinsert


【解决方案1】:

目前我知道的两种方法。

第一种方式

Its insert record one by one

final String sql = "INSERT INTO tablename(columnname) Values(?)";

PreparedStatement statement = connection.prepareStatement(sql);

while (condition) {
statement.setString(1,value);
statement.executeUpdate();
}

第二种方式

它将所有记录作为批量插入插入

final String sql = "INSERT INTO tablename(columnname) Values(?)";

PreparedStatement statement = connection.prepareStatement(sql);

while (condition) {
statement.setString(1,value);
statement.addBatch();
}

statement.executeBatch();

【讨论】:

    【解决方案2】:

    您需要使用 PreparedStatement 并可能使用批量插入。见http://www.exampledepot.com/egs/java.sql/BatchUpdate.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2016-01-31
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多