Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как прервать запрос к БД через JDBC? / 4 сообщений из 4, страница 1 из 1
26.10.2006, 17:18:53
    #34084624
Andy Ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прервать запрос к БД через JDBC?
Как правильно прервать выполнение SQL запроса через JDBC драйвер?

В частности меня интересует Oracle.

Пробовал выполнение PreparedStatement в отдельном потоке и для его прерывания метод cancel(). Не работает! :(
...
Рейтинг: 0 / 0
26.10.2006, 17:59:13
    #34084817
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прервать запрос к БД через JDBC?
А какая версия JDBC-драйверов? У меня вроде работает с JDBC 10.2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
 import  java.sql.*;
 import  java.util.Locale;
 import  java.util.Calendar;
 import  java.text.SimpleDateFormat;

 public   class  StatementCancelTest {

   private   static   final  String USERNAME = "<username>";

   private   static   final  String PASSWORD = "<password>";

   private   static   final  String SERVER = "jdbc:oracle:thin:@<host>:1521:<SERVICE_NAME>";

   public   static   void  main(String args[])
     throws  Exception {
    Locale.setDefault(Locale.ENGLISH);
    DriverManager.registerDriver( new  oracle.jdbc.OracleDriver());
    Connection con = DriverManager.getConnection(SERVER, USERNAME, PASSWORD);
    con.setAutoCommit(false);

    PreparedStatement pst = con.prepareStatement(
      "begin\n" +
      "  loop dbms_lock.sleep(2); end loop;\n" +
      "end;"
    );

    SimpleDateFormat dateFormat =  new  SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
    System.out.println(
      dateFormat.format( new  Date(Calendar.getInstance().getTimeInMillis()))
    );
    StatementThread statementThread =  new  StatementThread(pst);
    Thread.sleep( 10000 );
    pst.cancel();
    System.out.println("pst.cancel()");
    System.out.println(
      dateFormat.format( new  Date(Calendar.getInstance().getTimeInMillis()))
    );
  }
}

 class  StatementThread
   extends  Thread {

  PreparedStatement pst;

   public  StatementThread(PreparedStatement pst) { this .pst = pst;}

   public   void  run() {
     try  {
      pst.execute();
    }  catch  (SQLException e) {
      System.err.println("Error executing statement\n" + e.toString());
       throw   new  RuntimeException("Error executing statement\n" + e.toString());
    }
  }
}

...
Рейтинг: 0 / 0
26.10.2006, 18:04:27
    #34084843
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прервать запрос к БД через JDBC?
Сорри, чуть облажался, надо поправить одну строку:
Код: plaintext
1.
2.
//StatementThread statementThread = new StatementThread(pst);
 new  StatementThread(pst).start();

В результате:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Error executing statement
java.sql.SQLException: ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_LOCK", line 201
ORA-06512: at line 2

Exception in thread "Thread-0" java.lang.RuntimeException: Error executing statement
java.sql.SQLException: ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_LOCK", line 201
ORA-06512: at line 2

	at StatementThread.run(StatementCancelTest.java:56)
...
Рейтинг: 0 / 0
26.10.2006, 19:49:50
    #34085142
Andy Ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прервать запрос к БД через JDBC?
Вопрос снимается!

Действительно метод cancel() работает. У меня была ошибка в программе.

Спасибо Denis Popov.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как прервать запрос к БД через JDBC? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]