我正在开发一个必须实现clob对象的Java PLSQL过程。为了实现该Clob对象,我必须使用连接对象。基于Oracle文档,我可以使用Java.sql.drivermanager获得当前连接
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?
感谢您的任何帮助!
使用conn.createClob()
创建CLOB
,适用于我在12c中的罚款。我怀疑您在11中的错误消息中,您必须使用CLOB.createTemporary
方法来创建CLOB(在12C中也可以正常工作,但标记为 debreced )。
这里一个示例
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[])';
/
test
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。在计算机上,您应该有一个Oracle JDBC驱动程序(http://www.oracle.com/technetwork/database/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
即使您不使用createclob(),如果使用旧版本的Hibernate Core库。
错误刚刚抛出,但是应用程序启动。如果您不担心它,则可以离开它,但是如果您不想在申请启动期间看到错误,那么她就是修复。
它在Spring Boot 2.x -Hibernate Core 5.3.x组合中的一个错误。该问题有2种解决方案。我建议#1。
-
将所有休眠库升级到5.4.x(我的方式)
-
提供 spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true 在您的应用程序属性/yml文件中。(如果您真的不想升级您的Hibernate Core库库)。
我在将弹簧启动升级到2.4并使用teradata db时得到了这个,而没有任何createclob()。
如果您仍然想知道如何创建错误,则在https://alexpask.com/spring-boot-createclob-error/