在Java Oracle过程中创建clob对象时,将摘要methoderror抛弃



我正在开发一个必须实现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。

  1. 将所有休眠库升级到5.4.x(我的方式)

  2. 提供 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/

中对其进行了很好的解释。

最新更新