[英]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.