初始OrdImage对象,而不插入任何东西到数据库

问题描述:

我想从Oracle数据库检索OrdImage对象使用选择双表(从双重选择ordsys.ordimage.init())由于OrdImageSinature创建用于IMGSimilar运算符中的搜索目的。问题是,在的ORDImage代理存储数据后,我得到这个错误:初始OrdImage对象,而不插入任何东西到数据库

java.sql.SQLException: ORA-22275: invalid LOB locator specified 
ORA-06512: at "SYS.DBMS_LOB", line 797 
ORA-06512: at "ORDSYS.ORDSOURCE", line 778 
ORA-06512: at "ORDSYS.ORDIMAGE", line 508 
ORA-06512: at line 1 

我的代码如下:

Statement statement = connection.createStatement(); 
OracleResultSet result = (OracleResultSet) statement.executeQuery("SELECT ordsys.ordimage.init(), ordsys.ordimagesignature.init() FROM DUAL"); 

if (result.next()) { 
    OrdImage imageProxy = (OrdImage) result.getORAData(1, OrdImage.getORADataFactory()); 
    OrdImageSignature imageSignatureProxy = (OrdImageSignature) result.getORAData(2, OrdImageSignature.getORADataFactory()); 

    statement.close(); 
    result.close(); 

    imageProxy.loadDataFromByteArray(image.write().toByteArray()); //this line invokes error 
    imageProxy.setProperties(); 
    imageSignatureProxy.generateSignature(imageProxy); 

    //here will be performed search operation 
} 

图片我在imageProxy我将是在HDD本地存储(它不是存储在数据库中)。是否有任何解决方法如何创建OrdImageSignature而不创建OrdImage来绕过此错误或如何解决它?

非常感谢!

尝试这段代码

// retrieve dummy Oracle Mm Java objects from the database 
     OrdImage imgProxy = null; 
     OrdImageSignature sigProxy = null; 
     OracleCallableStatement cstmtOrdImageCreator = (OracleCallableStatement) conn.prepareCall(
       "DECLARE" 
       + " IMG ORDSYS.ORDIMAGE;" 
       + " SIG ORDSYS.ORDIMAGESIGNATURE;" 
       + " IMGBLOB BLOB;" 
       + " SIGBLOB BLOB;" 
       + "BEGIN" 
       + " IMG := ORDImage.init();" // init an image 
       + " DBMS_LOB.CreateTemporary(IMG.source.localdata, TRUE);" // an emply BLOB for the image 
       + " SIG := ORDImageSignature.init();" // init a signature of the image 
       + " DBMS_LOB.CreateTemporary(SIG.signature, TRUE);" // an emply BLOB for its signature 
       + " ? := IMG;" // return both the image and its signature as values of output parameters 
       + " ? := SIG;" 
       + "END;"); 
     try { 
      cstmtOrdImageCreator.registerOutParameter(1, 
        OrdImage._SQL_TYPECODE, OrdImage._SQL_NAME); 
      cstmtOrdImageCreator.registerOutParameter(2, 
        OrdImageSignature._SQL_TYPECODE, OrdImageSignature._SQL_NAME); 
      cstmtOrdImageCreator.executeUpdate(); 
      imgProxy = (OrdImage) cstmtOrdImageCreator.getORAData(1, OrdImage.getORADataFactory()); 
      sigProxy = (OrdImageSignature) cstmtOrdImageCreator.getORAData(2, OrdImageSignature.getORADataFactory()); 
     } finally { 
      cstmtOrdImageCreator.close(); 
     }