Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在停止应用程序JDBC时优雅地关闭事务_Java_Postgresql_Jdbc - Fatal编程技术网

Java 如何在停止应用程序JDBC时优雅地关闭事务

Java 如何在停止应用程序JDBC时优雅地关闭事务,java,postgresql,jdbc,Java,Postgresql,Jdbc,我使用事务将数据从一个地方移动到另一个地方。有些表很大,我正在调整应用程序,但有时我不想等待,我只是终止应用程序。但问题是查询已经发送到数据库,尽管我杀死了我的应用程序(代码),但事务(查询)并没有被取消。当我终止应用程序时,是否有任何方法取消或回滚事务 我知道我可以登录到DB服务器并终止查询。这不是我想用的方法。我在问,当应用程序被终止时,如何回滚或取消代码中的查询?您可以使用来取消正在运行的语句。在独立Java应用程序中,您可以在Java VM终止时调用该应用程序来关闭open语句 Runt

我使用事务将数据从一个地方移动到另一个地方。有些表很大,我正在调整应用程序,但有时我不想等待,我只是终止应用程序。但问题是查询已经发送到数据库,尽管我杀死了我的应用程序(代码),但事务(查询)并没有被取消。当我终止应用程序时,是否有任何方法取消或回滚事务

我知道我可以登录到DB服务器并终止查询。这不是我想用的方法。我在问,当应用程序被终止时,如何回滚或取消代码中的查询?

您可以使用来取消正在运行的语句。在独立Java应用程序中,您可以在Java VM终止时调用该应用程序来关闭open语句

Runtime.getRuntime().addShutdownHook(new Thread() {
          public void run() {
              for (Statement s : list of running statements) {
                 s.cancel();
              }
          }
    });
您可以使用取消正在运行的语句。在独立Java应用程序中,您可以在Java VM终止时调用该应用程序来关闭open语句

Runtime.getRuntime().addShutdownHook(new Thread() {
          public void run() {
              for (Statement s : list of running statements) {
                 s.cancel();
              }
          }
    });

另一个问题是,如何使用jdbc获得运行语句的列表?我不知道是否有用于此的API,或者您是否需要自己维护该列表。我建议为此发布一个新的StackOverflow问题。另一个问题,如何使用jdbc获取运行语句的列表?我不知道是否有用于此的API,或者您是否需要自己维护该列表。我建议为此发布一个新的StackOverflow问题。