【问题标题】:Java block when execute Oracle Procedure执行 Oracle 过程时的 Java 块
【发布时间】:2015-01-16 19:40:15
【问题描述】:

我有一个无法解决的问题,我使用 ojdbc7 库将 java 连接到数据库 Oracle11g 但是在启动程序时,当这结束时 java 应用程序没有毫无反应地往前走。 我试图改变驱动程序 ojdbc 但你知道的没有给我一些想法?我附上代码:

private static HashMap<String, Connection> connessioni = new HashMap<>();

....
public static Connection getConnectionIstance(String connessione){
        Connection connection=null;
        try{
            if((connection=connessioni.get(connessione))==null){                    
                     Class.forName("driver");    
                     connection=DriverManager.getConnection("urlDb","userDb","pwdDb");
                     connection.setAutoCommit(false);
                     connessioni.put(connessione, connection);

            }
        }catch(SQLException e){
            e.printStackTrace();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }

        return connection;
    }

主要

....

CallableStatement callStatement=null;
callStatement = connection.prepareCall({call nomePkg.mainpkg(?)});
callStatement.registerOutParameter(1, Types.INTEGER);

System.out.println("START PROCEDURe");                
callStatement.execute();
System.out.println("END PROCEDURe");

控制台从不打印“END PROCEDURe”。

附:整个过程大约需要一个半小时

【问题讨论】:

  • 您能告诉我们您正在执行的程序吗?您是否在 callStatement.execute() 中发现任何异常?

标签: java oracle11g block execute ojdbc


【解决方案1】:

JDBC 语句通常会使 java 进程等待结果(或错误)。如果您想让您的应用程序在执行数据库代码时继续运行,请使用后端线程调用 execute() 方法。

也知道在数据库层可能有也可能没有超时,所以在一段时间后没有响应的方法可能会超时;那些不会向 JDBC 层返回消息,因此 JDBC 层不会回来。

查看oracle配置的超时设置。

【讨论】:

  • 感谢您的回答。 oracle pl/sql 过程完成但 java 没有响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 2011-06-19
  • 2020-01-05
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多