JDBC是否支持准备语句中的Oracle提示

时间:2014-07-01 12:18:42

标签: java sql oracle prepared-statement ojdbc

我有这样的查询:

String sql = "DELETE FROM " + table.getName().quoted() + " WHERE modificationTime < ? AND ROWNUM < " + (objectsPerCommit + 1);
PreparedStatement statement = connection.prepareStatement(sql);
statement.setObject(1, ...timestamp_value..., ...timestamp_type...);
boolean result = statement.execute();
...
statement.close();

所以我执行的SQL主要是:

  DELETE
  FROM
    mytable 
  WHERE
    modificationTime < to_date('2014-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
    AND ROWNUM <= 10000;

此查询运行非常慢,因为它没有使用现有的组合索引而不是modifyTime和其他两列。而是进行全表扫描。 如果我强制使用带有提示的索引,如下所示,一切都顺利进行。

  DELETE /*+ index(mytable PK_MYTABLE) */
  FROM
    mytable 
  WHERE
    modificationTime < to_date('2014-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
    AND ROWNUM <= 10000;

我的问题是:这是否适用于OJDBC?我可以简单地将代码更改为:

String sql = "DELETE /*+ index(mytable PK_MYTABLE) */ FROM " + table.getName().quoted() + " WHERE modificationTime < ? AND ROWNUM < " + (objectsPerCommit + 1);
...

一切都按预期工作?或者OJDBC会以某种方式放弃评论/提示吗?

1 个答案:

答案 0 :(得分:1)