2011-11-01 2 views
3

IMGSimilar 연산자에서 검색을 위해 OrdImageSinature 작성시 사용으로 인해 이중 테이블 (이중에서 ordsys.ordimage.init() 선택)을 통한 선택을 사용하여 Oracle 데이터베이스에서 OrdImage 객체를 검색하려고합니다. .DB에 아무 것도 삽입하지 않은 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 

내 코드는 다음입니다 : : 문제는 ORDImage 프록시에 데이터를 저장 한 후 나는이 오류를 얻을이며, 내가있는 ImageProxy에 배치하고

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 
} 

이미지가 HDD에 로컬로 저장됩니다 (그렇지 않다 데이터베이스에 저장 됨). OrdImageSignature를 작성하지 않고 OrdImage를 작성하지 않고이 오류를 우회하는 방법이나 해결 방법이 있습니까?

고맙습니다.

답변

4

이 코드를 사용해보십시오

// 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(); 
     } 
관련 문제