JDBC 和 Oracle DB : Escape '(单引号)

JDBC and Oracle DB : Escape ' (single quote)

您好,这看起来很简单,但我遇到了问题。

首先,我使用 Statement#executeBatch 来执行许多 UPDATE 语句。每个更新语句都有要更新的字符串值。这些字符串有“'”单引号。我已尝试根据 Oracle 文档在其前面再添加一个单引号,并在单引号前添加 '\\\' 。对于第一个,我的查询卡住了,即使在 10 分钟后也没有出现。第二个我得到 'batching: ORA-00927: missing equal sign' 错误。

正确的做法是什么? 注意:- 我不能使用 PreparedStatement 来利用 JDBC 参数。

请帮忙。

您可以使用 q-quoted string 例如 q'['''''''']'

举个例子

Statement stmt = con.createStatement();

stmt.addBatch("update tst set txt = q'['''''''']' where id = 1");
stmt.addBatch("update tst set txt = q'['''''''']' where id = 2");
stmt.addBatch("update tst set txt = q'['''''''']' where id = 3");
stmt.addBatch("update tst set txt = q'['''''''']' where id = 4");
stmt.addBatch("update tst set txt = q'['''''''']' where id = 5"); 
// submit a batch of update commands for execution
int[] updateCounts = stmt.executeBatch();

但是正确的方法是使用准备语句

PreparedStatement stmt = con.prepareStatement("update tst set txt = ? where id = ?");
5.times { i ->
  stmt.setString(1, "''''''''");
  stmt.setInt(2, i+1);
  stmt.addBatch();
}

// submit a batch of update commands for execution
int[] updateCounts = stmt.executeBatch();