执行Oracle Procedure时的Java块

时间:2014-11-19 10:18:14

标签: java oracle11g block execute ojdbc

我有一个问题无法解决,我使用 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”。

P.S。该过程大约需要一个半小时

1 个答案:

答案 0 :(得分:0)

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

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

查看oracle配置的超时设置。