【问题标题】:passing a blob as parameter on a java method using Oracle JVM使用 Oracle JVM 将 blob 作为参数传递给 java 方法
【发布时间】:2011-01-26 10:36:06
【问题描述】:

嘿,我正在尝试找到一种方法来运行它。我正在使用 oracle 数据库 10g,其中我将 blob 存储在表中。我希望能够在我的 java 代码中读出 blob 并将其传递给 java 方法。我通过 loadjava 在我的数据库中加载了我的 java 类。我存储 Blob 的表也已设置。

这是我的 java 类和我想传递 BLOB 的方法

import java.lang.*;
import java.sql.*;
import oracle.sql.*;

public class Test
{

  public static void getWidth(BLOB myBlob) throws Exception
  {
    System.out.println(myblob.length());
  }

};

这是我在 PL/SQL 中的 Java 存储过程(包装器)

CREATE OR REPLACE PROCEDURE testmethod (p_blob  IN  BLOB)
AS LANGUAGE JAVA   
NAME 'Test.getWidth(oracle.sql.BLOB)';

它将 java 类加载到数据库中,我的包装器也编译并存储。

当我想运行execute testmethod(testphoto.jpg);

它给了我错误:'testphoto.jpg must be declared'

有什么建议可以让它运行吗?感谢您的宝贵时间。

这是我的过程测试方法中的 PL/SQL 块:

DECLARE  
  P_FILE VARCHAR2(200);  
  P_BLOB BLOB;  
BEGIN  
  P_FILE := NULL;  
  P_BLOB := NULL;  

  TESTMETHOD(  
    P_FILE => P_FILE,  
    P_BLOB => P_BLOB  
  );  
END;

【问题讨论】:

    标签: java oracle plsql jvm blob


    【解决方案1】:

    testphoto.jpg 只是您要传递给方法的文件的名称。您需要将该文件的内容作为 blob 传递到您的过程中。您将需要代码将文件内容实际加载到 blob 变量中,或者如果它已经在数据库中,则从表中提取它。然后你将把它作为第二个参数传递给你的过程。

    如果你想测试它,你可以创建一个临时表并用一些 blob 数据加载它,如下所示:

    create table blobtest (filecontents blob);
    insert into blobtest values (utl_raw.cast_to_raw('Test Data'));
    

    然后,您可以从 sqlplus 运行一些 pl/sql 以提取该数据并将其传递给您的过程:

    declare
      temp blob;
      filename varchar2(200) := 'Test';
    begin
    
      select filecontents
        into temp
        from blobtest;
    
      testmethod(filename, temp);
    
    end;
    /
    

    当然,如果数据已经在一个表中,并且您想要一个 blob 的长度,您可以像这样使用dbms_lob 函数getLength

    select dbms_lob.getLength(filecontents) from blobtest;

    【讨论】:

    • 不幸的是,我得到了这个错误:*原因:试图在 Java 类中执行以前没有的方法,现在无法成功编译或解析。 *行动:调整调用或使类可解析。
    • 我必须在('Test Data')中输入什么
    • @DannyRe:你不知道,那只是一个字符串值,我将其转换为 blob 以进行简单测试。
    • 我把你所有的代码都放到了我的数据库中,但是没有用。我很沮丧:(我在我的数据库中创建了一个目录。将一个jpg加载到我的blob表中。它是我想发送到我的java方法中的那个。感谢你的帮助!
    • 你能帮我吗?该死的,我需要它在明天之前工作...... :(
    最近更新 更多