JDBC:PreparedStatement.cancel()的正确行为是什么

时间:2014-02-06 20:05:32

标签: java jdbc

我想知道在设置了参数值的PreparedStatement上调用cancel()时应该采取的正确行为(假设您使用的JDBC驱动程序支持它)。如果未尝试执行,是否应保留设定值?

我问的是JDBC定义的正确行为,而不是特定数据库驱动程序的行为。

例如,

String query = "SELECT * FROM t where t.c1 = ?";
PreparedStatement ps = con.prepareStatement(query);

ps.setInt(1, 1);
ps.cancel();
ps.execute();

参数值1应该保留吗?

这个怎么样?是否保留了批处理参数值?

Reader charReader1 = new InputStream(new FileInputStream("SomeBigFile"));
ps.setCharacterInputStream(1, charReader1, -1);
ps.addBatch();

ps.cancel();

Reader charReader2 = new InputStream(new FileInputStream("AnotherBigFile"));
ps.setCharacterInputStream(1, charReader2, -1);
ps.addBatch();

ps.executeBatch();

1 个答案:

答案 0 :(得分:1)

  

如果DBMS和驱动程序都支持,则取消此Statement对象   中止SQL语句。这个方法可以由一个线程使用   取消正由另一个线程执行的语句。

强调“one thread取消another thread正在执行的语句”。您的示例只涉及一个线程,并且该语句未被执行,因此不是您使用cancel()的方式。

更多讨论here.