我有一个类,它通过JDBC与数据库一起工作。连接到数据库像往常一样建立:Oracle:Java存储函数:使用数据库
Connection conn = null;
try {
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection(DS_URL);
} catch (SQLException ex) {
logger.debug("Cannot register driver for Oracle DB", ex);
}
现在我必须使Oracle存储函数,与数据库的工作。是否有任何不同的方式来处理数据库(例如,通过使用某种上下文建立连接)?对我来说,建立从功能内的URL,这是存储在同一个DB =)
UPD似乎有点愚蠢:我有maven项目编译在罐子里。我的班级:
package testjavatooracleproject;
import java.sql.*;
public class App
{
public static void main(String[] args) throws SQLException{
System.out.println(selectJavaObjectById(400094));
}
public static String selectJavaObjectById(long id) throws SQLException
{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:user/[email protected]:1521:ae");
PreparedStatement ps = conn.prepareStatement("select * from user_objects where object_id = ?");
ps.setLong(1, id);
ResultSet rs = ps.executeQuery();
int columnCount = rs.getMetaData().getColumnCount();
StringBuilder sb = new StringBuilder();
if (rs.next()){
for(int i = 1; i <= columnCount; i++){
sb.append(rs.getObject(i));
}
}
conn.close();
return sb.toString();
}
}
接下来,使用loadjava上传在DB是罐子IM:
loadjava -resolve -v -user user/[email protected]:1521/ae C:\Exchange\TestJavaToOracleProject.jar
然后我试图创建PL/SQL包装:
create or replace
function getUserObjectInfoById(obj_id IN NUMBER) return VARCHAR2
as language java
name 'testjavatooracleproject.App.selectJavaObjectById(long) return java.lang.String';
然后我试图拨打我的功能:
select getUserObjectInfoById(400094) from dual;
但我发现了错误:
ORA-29532: Java call terminated by uncaught Java exception: java.security.AccessControlException: the Permission (java.net.SocketPermission localhost:1521 connect,resolve) has not been granted to user. The PL/SQL to grant this is dbms_java.grant_permission('user', 'SYS:java.net.SocketPermission', 'localhost:1521', 'connect,resolve')
29532. 00000 - "Java call terminated by uncaught Java exception: %s"
*Cause: A Java exception or error was signaled and could not be
resolved by the Java code.
*Action: Modify Java code, if this behavior is not intended.
UPD:问题就解决了。解决方法对我来说:使用下面的代码创建连接:
OracleDriver ora = new OracleDriver();
Conenction conn = ora.defaultConenction();
你的问题是什么? –
@a_horse_with_no_name,我的问题是“如何使用数据库从Java函数,存储在相同的数据库?”。 –
你是什么意思“从数据库从Java函数”?您是否需要关于如何通过JDBC使用语句来处理数据库的教程?一个Oracle存储函数已经“在使用数据库”,它使用的是PL/SQL。 –