繁体   English   中英

通过Java调用Oracle PL / SQL函数

[英]Call Oracle pl/sql function through java

我需要编写一个Java存储过程,该存储过程可以从调用Oracle实例中调用oracle PL / SQL函数。

我的Java存储过程方法调用以下Java方法

private void WriteToDB(String action, String timestamp, String filename) {
        CallableStatement cstmt = null;
        try{
            String serverIP = "xx.xx.xx";
            String portNumber = "yyyy";
            String instanceName = "instance1";
            String username = "user1";
            String password = "password1";
            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
            String url = "jdbc:oracle:thin:@" + serverIP + ":" + portNumber + ":" + instanceName;
            Connection connection = DriverManager.getConnection(url, username, password);


            String call = "{ call PACKAGE1.FUNCTION1(?, ?, ?) }";
                          cstmt = connection.prepareCall(call);
                          cstmt.setQueryTimeout(1800);
                          cstmt.setString(1, action);
                          cstmt.setString(2, timestamp);
                          cstmt.setString(3, filename);                      
                          cstmt.executeUpdate();
        }
        catch (SQLException e){
            WriteEventToLogFile(e.getMessage());
        }
        finally{
            if (cstmt != null){
                cstmt.close();
            }
        }
    }

当我从Netbeans IDE运行代码时,它可以正常运行,并且PL / SQL函数得到执行(Pl / SQL函数将记录插入到表中)。 但是,当我将jar加载到oracle并在Oracle中运行存储过程时,该方法似乎无任何异常地执行,但是没有任何记录插入到表中,这使我认为PL / SQL函数未执行。

另外我的问题是有没有办法在不使用URL的情况下创建到调用的oracle实例的Connection对象(这意味着必须提供我的ip,端口nad实例名称)。

在这种情况下可以使用OracleDriver.getDefaultConnection()吗?

我没有看到connection.close()或connection.commit()。 您可能需要添加它们。在IDE中它起作用是因为主程序终止了,因此jvm在驱动程序上执行了finalize方法,并为您关闭了连接。 如果您在“服务器”(无论在哪里)上执行,则不会释放连接。 如果您检查数据库会话,它可能仍在吸烟中徘徊...

你可以这样调用函数

字符串调用=“ {SELECT PACKAGE1.FUNCTION1(?,?,?)FROM DUAL}”;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM