我正在开发一个必须实现CLOB对象的Java PLSQL过程。为了实现Clob对象,我必须使用连接对象。基于Oracle documentation,我可以使用java.sql.DriverManager获取当前连接,但是当我执行以下代码时,抛出了一个AbstractMethodError错误
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
Clob clob = conn.createClob();
我看到很多帖子都在讨论驱动程序与运行代码的Java运行时的兼容性,但是当我在Oracle DB中工作时,我认为它应该是兼容的。
Oracle版本:11.2.0.4.0
我的目标是在我的java方法中创建一个clob并将其返回到我的plsql代码。如何在Oracle数据库中存储的java类中实现Clob?
感谢您的帮助!
答案 0 :(得分:1)
使用CLOB
创建conn.createClob()
适用于12c的罚款。我怀疑你在11中的错误信息中你必须使用CLOB.createTemporary
方法来创建CLOB(在12c中工作正常,但标记为已弃用)。
这是一个例子
Java类
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "CreateCLOB"
AS
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;
/****** START PASTE JAVA CLASS HERE *****/
public class CreateCLOB{
public static void ClobProc (Clob cl[]) throws SQLException
{
Connection conn = DriverManager.getConnection ("jdbc:default:connection:"); /* or use "jdbc:oracle:kprb:" */
Clob clob = CLOB.createTemporary(conn, false, oracle.sql.CLOB.DURATION_SESSION); /* this is deprecated in 12c */
// conn.createClob(); /* works fine in 12.1.0.2.0 */
clob.setString(1, "Test Data");
cl[0] = clob;
}
}
/
<强>包装强>
create or replace procedure MyClob (cl OUT Clob)
as language java
name 'CreateCLOB.ClobProc(java.sql.Clob[])';
/
<强>测试强>
declare
x Clob;
begin
MyClob(x);
dbms_output.put_line('created CLOB length = ' || dbms_lob.getlength(x));
end;
/
created CLOB length = 9
如上所述,我无法在版本11上测试它,但我想它会起作用。
select * from v$version;
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
答案 1 :(得分:0)
您需要按照以下步骤操作:
<强> 1。在您的计算机上,您应该有一个Oracle jdbc驱动程序(http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html)
<强> 2。加载驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
第3。获得连接
Connection connection =
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID","username","password");
更新:如果您在Oracle DB内部工作,您可以选择一种驱动程序(服务器端瘦驱动程序或服务器端内部驱动程序) - https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html