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();
您好,这看起来很简单,但我遇到了问题。
首先,我使用 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();