0 0

怎样终止jdbc数据库查询10

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


问题补充:<div class="quote_title">robertliudeqiang 写道</div><div class="quote_div">个人认为和具体数据库有关,例如: 如果你用的是mysql数据库,查查看是否mysql提供接口,可以终止正在执行的查询。 <br /> <br />比如,phpmyadmin就提供功能,终止正在执行的sql查询,但是我不确定这部分功能是数据库特定的功能还是各数据库都有统一的标准,个人觉得应该和具体数据库有关的。</div> <br />java.sql.Statement接口中提供了cancel()方法来中止SQL语句,取消Statement对象。 <br />但是我并没有理解怎样去运用它。。。

问题补充:<div class="quote_title">robertliudeqiang 写道</div><div class="quote_div">java.sql.Statement是个接口 <br /> <br />确实可以在一个线程中取消另外一个线程中执行的sql,但是注释中也说明了必要条件是DBMS(数据库)和driver(驱动)支持。 <br /> <br />如果你要使用这个接口,需要首先确定数据库是否支持,然后找到相应的驱动,最后,根据驱动提供的API写一个实现java.sql.Statement接口的类。才能使用cancel方法,本质上这些事情还是要自己写。 <br /> <br />看了一下jdk里的类,只有sun.jdbc.odbc.JdbcOdbcStatement实现了这个方法,针对特定的数据库,需要再找包或是自己实现,jdk中没有现成的。</div> <br />我使用的是oracle的jdbc包,oracle.jdbc.driver.OracleStatement这个类里有<em>cancel()</em>方法的具体实现。 <br />我有一点不明白,在多线程情况下,在一个线程中,怎样获取其他线程正在执行的Statement,然后中止?难道是全部中止?

问题补充:我的应用场景是这样的: <br />在jsp页面上,点击查询按钮,然后通过jdbc在数据库中查询记录,然后用列表显示出来。 <br />但有时候查询的时间消耗比较多,所以就添加了一个等待条提示,如图。 <br /><img src="http://dl.iteye.com/upload/attachment/204007/ed7796c6-b8a6-3449-ad00-6118255e52d6.jpg" /> <br /> <br />我想改进一下,在等待条上添加一个取消按钮,来取消本次查询操作。请问我应该怎么做? <br /> <br />

问题补充: <br /> <br /><div class="quote_title">robertliudeqiang 写道</div><div class="quote_div"> <br />UI这块本质还还是依赖后台实现,取消有接口是可以做的,进度条就比较麻烦了,还是要看oracle是否提供sql语句执行情况的接口。</div> <br />进度条的实现肯定比取消还难,我用的只是一个“等待条”而不是“进度条”。。。

问题补充:<div class="quote_title">robertliudeqiang 写道</div><div class="quote_div"> <br /> <br />从你的UI看,一次只有一条sql语句在运行,那么你可以把OracleStatement保存成对象的域,在一个线程中启动,当用户点击“取消”按钮的时候,启动一个新的线程,调用这个OracleStatement的cancel方法就行了。 <br /> <br /></div> <br />“把OracleStatement保存成对象的域”这是什么含义呢,真的是第一次听到这个说法。 <br /> <br /> <br />

问题补充:<div class="quote_title">robertliudeqiang 写道</div><div class="quote_div"><div class="quote_title">引用</div><div class="quote_div">我想改进一下,在等待条上添加一个取消按钮,来取消本次查询操作。请问我应该怎么做?</div> <br /> <br />这个系统已经完成了,你是想添加功能? <br /></div> <br /> <br />“等待条”是已经完成的,是想添加“取消查询”的功能! <br /> <br /><div class="quote_title">引用</div><div class="quote_div"> <br />如果是这样,你先看看OracleStatement 这个域是在哪里定义的,对象里还是线程里?</div> <br />没有明白我需要做什么??
DAO 
2010年2月05日 20:51
  • 大小: 9 KB

8个答案 按时间排序 按投票排序

0 0

如果想取得当前线程的资源可以使用threadLocal,不过不建议使用,这个需要主动释放资源。是不是可以使用 超时机制。把执行SQL放到一个线程中执行,另外一个设置一个wait(timeout)。或者使用5.0加入的concurrency包里的futureTask,很好控制这种同步与线程交互及数据传递。不知是否有助于换个方式思考。

2010年2月06日 23:34
0 0

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


举个简单的例子

public class Tasks {
    OracleStatement state;

    ...

    public Type querySql() {
        ...
    }

    public boolean cancelSql() {
        // 需要加一些同步逻辑
        if ( state != null )
          state.cancel();
    }   

}

state是类Tasks的域,两个线程,调用同一个对象的方法,一个调用querySql,一个调用cancelSql,都可以访问state这个域。两个函数在访问这个域时需要加一些同步操作。

2010年2月06日 18:42
0 0

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


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

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

2010年2月06日 11:53
0 0

查了一下OracleStatement
void cancel()
          Cancel the current statement

这个方法是OracleStatement调用的,用来取消这个statement。

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

如果你要实现类似myphpadmin中的效果,就麻烦点,需要把OracleStatement保存到列表中。



2010年2月06日 11:50
0 0

引用
我的应用场景是这样的:
在jsp页面上,点击查询按钮,然后通过jdbc在数据库中查询记录,然后用列表显示出来。
但有时候查询的时间消耗比较多,所以就添加了一个等待条提示,如图。


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

2010年2月06日 11:43
0 0

引用
我使用的是oracle的jdbc包,oracle.jdbc.driver.OracleStatement这个类里有cancel()方法的具体实现。

有现成的实现就好办了。

引用
我有一点不明白,在多线程情况下,在一个线程中,怎样获取其他线程正在执行的Statement,然后中止?难道是全部中止?


这块就涉及线程间通讯的问题了,一种比较简单的方法就是把Statement作为对象的域,各个线程都能访问,不同线程访问时加上同步控制。关于这块,建议咨询多线程编程更有经验的人。

2010年2月06日 11:40
0 0

java.sql.Statement是个接口

方法void cancel() throws SQLException;

看注释:
    /**
     * Cancels this <code>Statement</code> object if both the DBMS and
     * driver support aborting an SQL statement.
     * This method can be used by one thread to cancel a statement that
     * is being executed by another thread.
     *
     * @exception SQLException if a database access error occurs
     */
确实可以在一个线程中取消另外一个线程中执行的sql,但是注释中也说明了必要条件是DBMS(数据库)和driver(驱动)支持。

如果你要使用这个接口,需要首先确定数据库是否支持,然后找到相应的驱动,最后,根据驱动提供的API写一个实现java.sql.Statement接口的类。才能使用cancel方法,本质上这些事情还是要自己写。

看了一下jdk里的类,只有sun.jdbc.odbc.JdbcOdbcStatement实现了这个方法,针对特定的数据库,需要再找包或是自己实现,jdk中没有现成的。

2010年2月06日 11:01
0 0

个人认为和具体数据库有关,例如: 如果你用的是mysql数据库,查查看是否mysql提供接口,可以终止正在执行的查询。

比如,phpmyadmin就提供功能,终止正在执行的sql查询,但是我不确定这部分功能是数据库特定的功能还是各数据库都有统一的标准,个人觉得应该和具体数据库有关的。

2010年2月06日 08:37

相关推荐

    jdbc连接sqlserver数据库连接代码

    本文详细介绍了如何使用 JDBC 连接 SQL Server 数据库的方法,包括加载 JDBC 驱动、建立数据库连接、执行 SQL 语句(创建表、插入数据)以及查询数据。通过以上步骤,可以实现 Java 应用程序与 SQL Server 数据库的...

    JDBC操作 连接MYSQL数据库.pdf

    在本实验报告中,主题是使用Java JDBC(Java Database Connectivity)连接并操作MySQL数据库。JDBC是Java平台的标准API,用于与各种类型的数据库进行交互,包括MySQL。以下是实验的主要知识点和详细说明: 1. **...

    JDBC操作连接MYSQL数据库[借鉴].pdf

    在本实验报告中,主题是使用Java的JDBC(Java Database Connectivity)来操作MySQL数据库。JDBC是Java中用于与各种数据库进行交互的一组接口和类,它为开发者提供了标准的API,使得开发者可以编写与数据库无关的代码...

    JDBC实用技术(连接Oracle数据库)

    **JDBC实用技术:连接Oracle数据库** 在Java开发中,JDBC(Java Database Connectivity)是连接数据库的标准接口,它允许Java应用程序与各种数据库进行交互。本篇将详细讲解如何使用JDBC来连接Oracle数据库,包括...

    JDBC基础.ppt

    JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种标准接口。它由Sun Microsystems(现为Oracle公司的一部分)开发,自1996年以来不断成熟,为开发者提供了丰富的类和接口,使得在...

    JDBC-JTA.rar_jdbc_jta_jta JDBC

    对应的`.class`文件(如`myJDBCUpdateServlet`、`myJTAServlet`、`myJDBCReadServlet`)是这些Servlet的编译后版本,它们可能包含了具体的JDBC数据库操作和JTA事务管理的代码。`www.pudn.com.txt`可能是一个文档,...

    elasticsearch-jdbc 同步工具下载及配置说明

    - `jdbc.fetch.size`:每次查询从数据库获取的记录数。 - `schedule`:调度间隔,如`@daily`表示每天一次,`@hourly`表示每小时一次。 ### 高级特性 - **分页查询**:通过设置`jdbc.scroll.size`和`jdbc.scroll`...

    学习JDBC程序,本章为练习代码备份,代码注释较少,如果有遗忘,参照学习mysql数据库时的代码备份,有详细步骤和注.zip

    10. **异常处理**:在JDBC编程中,要妥善处理`SQLException`,确保程序在遇到错误时能够优雅地恢复或终止。 根据描述中的提示,这个练习可能包括了创建数据库连接、编写SQL语句、执行查询和更新操作,以及处理结果...

    java与数据库的连接

    无论是简单的数据查询还是复杂的事务处理,Java都能通过标准的JDBC(Java Database Connectivity)接口实现对多种数据库的有效操作。本文将详细介绍如何在Java中实现与数据库的连接,并通过一个具体的示例来展示这一...

    Java实验8 数据库.doc

    8. **数据库操作的最佳实践**: 实验可能强调了使用参数化查询的重要性,以避免SQL注入攻击。此外,使用连接池管理数据库连接,可以提高性能并减少资源消耗。 9. **JavaFX或Swing**: 尽管在给定的代码片段中没有显示...

    数据库数据操作Java设计报告

    本报告主要探讨的是如何使用Java进行数据库操作,特别是通过Java JDBC(Java Database Connectivity)技术来实现对数据库的增、删、改、查功能。JDBC是Java中用于访问和操作关系数据库的标准API,它允许Java应用程序...

    JDBC连接MySQL驱动

    JDBC(Java Database Connectivity)是Java编程语言中用于与数据库交互的一种标准接口。它由Sun Microsystems公司开发并引入Java平台,使得Java程序员可以使用相同的API与各种不同的数据库系统进行通信。MySQL是一个...

    sqljdbc4.jar

    《SQL Server 2008连接驱动:sqljdbc4.jar详解》 在IT行业中,数据库的连接和操作是至关重要的,而SQL...在实际项目中,合理利用sqljdbc4.jar,能够有效地实现数据的存储、查询和处理,为业务逻辑提供坚实的数据支持。

    jar包数据库连接包集合

    4. **数据库操作**: 通过JDBC,可以执行SQL查询、更新语句、事务处理等。`java.sql.Connection`接口代表一个到数据库的会话,`java.sql.Statement`或`java.sql.PreparedStatement`用于执行SQL语句,`java.sql....

    Java操作Oracle数据库-多线程.rar

    1. **JDBC连接**:Java Database Connectivity (JDBC) 是Java平台的标准接口,用于连接Java应用程序和各种类型的数据库,包括Oracle。在Java中,我们需要导入Oracle JDBC驱动(如ojdbc.jar)并使用`Class.forName()`...

    jsp网页对数据库的增删查改

    综上所述,"jsp网页对数据库的增删查改"是一个涵盖多种技术概念的主题,包括JSP基础、JDBC数据库连接、SQL操作、异常处理、事务管理以及模板技术的应用。通过实践这些知识,开发者可以构建出功能完备、交互性强的Web...

    通用数据库分析工具

    5.新增异步查询终断功能,当大量数据查询时,可以进行终止。 ================================================================================ V3.0 吴水平 QQ:290165405 Mail:wsp898@163.com 鄂狼工作室 ...

    Oracle数据库体系架构图

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,其复杂的体系架构提供了高效的数据管理、事务处理和安全性。本文将深入探讨Oracle数据库的体系架构,重点解析其中的关键组件及其作用。 首先,我们来了解一下...

    DB2 V8数据库基础 V1.0.20060426.doc

    - **1.1.4 DB2客户端产品**:这些产品通常包括ODBC驱动、JDBC驱动等,用于在客户端访问DB2数据库。 - **1.1.5 DB2提供哪些关系扩展器**:DB2提供了多种关系型数据库管理系统的扩展功能,如分区、并发控制等。 **...

    Oracle数据库学习日记-实用性最强的Oracle学习总结.docx

    ### Oracle数据库学习知识点详解 #### 一、基本使用 ##### 1.1 常用命令 **1.1.1 Connect/Disconnect数据库连接命令** - **用途:** 连接或断开与Oracle数据库的连接。 - **语法示例:** - `sqlplus username/...

Global site tag (gtag.js) - Google Analytics