我想知道在设置了参数值的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();
答案 0 :(得分:1)
如果DBMS和驱动程序都支持,则取消此Statement对象 中止SQL语句。这个方法可以由一个线程使用 取消正由另一个线程执行的语句。
强调“one thread
取消another thread
正在执行的语句”。您的示例只涉及一个线程,并且该语句未被执行,因此不是您使用cancel()
的方式。
更多讨论here.