哪位仁兄能提供一个可以终止正在执行jdbc数据库查询的代码?多谢!

问题补充:

robertliudeqiang 写道
个人认为和具体数据库有关,例如: 如果你用的是mysql数据库,查查看是否mysql提供接口,可以终止正在执行的查询。
比如,phpmyadmin就提供功能,终止正在执行的sql查询,但是我不确定这部分功能是数据库特定的功能还是各数据库都有统一的标准,个人觉得应该和具体数据库有关的。

java.sql.Statement接口中提供了cancel()方法来中止SQL语句,取消Statement对象。
但是我并没有理解怎样去运用它。。。

问题补充:

robertliudeqiang 写道
java.sql.Statement是个接口
确实可以在一个线程中取消另外一个线程中执行的sql,但是注释中也说明了必要条件是DBMS(数据库)和driver(驱动)支持。
如果你要使用这个接口,需要首先确定数据库是否支持,然后找到相应的驱动,最后,根据驱动提供的API写一个实现java.sql.Statement接口的类。才能使用cancel方法,本质上这些事情还是要自己写。
看了一下jdk里的类,只有sun.jdbc.odbc.JdbcOdbcStatement实现了这个方法,针对特定的数据库,需要再找包或是自己实现,jdk中没有现成的。

我使用的是oracle的jdbc包,oracle.jdbc.driver.OracleStatement这个类里有cancel()方法的具体实现。
我有一点不明白,在多线程情况下,在一个线程中,怎样获取其他线程正在执行的Statement,然后中止?难道是全部中止?

问题补充:我的应用场景是这样的:
在jsp页面上,点击查询按钮,然后通过jdbc在数据库中查询记录,然后用列表显示出来。
但有时候查询的时间消耗比较多,所以就添加了一个等待条提示,如图。c17511811c2244dbec710be674859245.png
我想改进一下,在等待条上添加一个取消按钮,来取消本次查询操作。请问我应该怎么做?

问题补充:

robertliudeqiang 写道

UI这块本质还还是依赖后台实现,取消有接口是可以做的,进度条就比较麻烦了,还是要看oracle是否提供sql语句执行情况的接口。

进度条的实现肯定比取消还难,我用的只是一个“等待条”而不是“进度条”。。。

问题补充:

robertliudeqiang 写道

从你的UI看,一次只有一条sql语句在运行,那么你可以把OracleStatement保存成对象的域,在一个线程中启动,当用户点击“取消”按钮的时候,启动一个新的线程,调用这个OracleStatement的cancel方法就行了。

“把OracleStatement保存成对象的域”这是什么含义呢,真的是第一次听到这个说法。

问题补充:

robertliudeqiang 写道
引用
我想改进一下,在等待条上添加一个取消按钮,来取消本次查询操作。请问我应该怎么做?

这个系统已经完成了,你是想添加功能?

“等待条”是已经完成的,是想添加“取消查询”的功能!
引用

如果是这样,你先看看OracleStatement 这个域是在哪里定义的,对象里还是线程里?

没有明白我需要做什么??
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐