You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by "McFarlane, Keith GSNL-GSXE" <ke...@shell.com> on 2006/04/24 16:13:34 UTC

JDBC: Blob . setBytes: Unsupported Feature(s)!

 Dear Derby-Users,


  CAN ANYONE ADVISE WHEN / WHETHER THE JDBC Blob-INTERFACE METHOD:

	int setBytes(long pos, byte[] bytes, int offset, int len) 
	 throws SQLException


  METHOD, AND ITS SISTER METHODS

	OutputStream setBinaryStream ( long pos)
	 throws SQLException;

	int setBytes(long pos, byte[] bytes)
	 throws SQLException;


 WILL BE IMPLEMENTED IN APACHE DERBY? Currently these methods do nothing more than throw an SQLException with the message: "Feature not implemented: no details". THESE METHODS ARE REQUIRED FOR THE STANDARD JAVA EDITION VERSIONS 4 and 5!!


 Best Wishes
 Keith McFarlane.


 Keith McFarlane, GSXE,
 e-Commerce & e-Service-Delivery Group,
 Shell Global Solutions International BV
 P.O. Box 38000, 1030 BN Amsterdam, 
 The Netherlands / NL.

Tel / Office: +31 (0) 20 630 2457 2497
Email: Keith.McFarlane@shell.com

______________________________________________________________________________________________________________


 PS: THE PROBLEM CONTEXT IS (ROUGHLY) AS FOLLOWS: I would really like these methods to "hide" a free-text indexing solution in an encrypted Derby database stored on a portal-client (external third-party) PC. The chosen search-indexing tools is (of course) Apache Lucene). I came across the following exception stack when attempting "random access" to a Derby BLOB (binary large object) using the standard JDBC method: setBytes ( );

 Exception in thread "main" java.io.IOException: flushBuffer () Exception: IndexOutput: Feature not implemented: no details.
        at DerbyIndexOutput.flushBuffer(DerbyIndexOutput.java:79)
        at org.apache.lucene.store.BufferedIndexOutput.flush(BufferedIndexOutpu.java:84)
        at org.apache.lucene.store.BufferedIndexOutput.close(BufferedIndexOutpu.java:98)
        at DerbyIndexOutput.close(DerbyIndexOutput.java:88)
        at org.apache.lucene.index.SegmentInfos.write(SegmentInfos.java:91)
        at org.apache.lucene.index.IndexWriter$1.doBody(IndexWriter.java:263)
        at org.apache.lucene.store.Lock$With.run(Lock.java:109)
        at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:260)
        at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:245)
        at DerbyTextIndexApp.<init>(DerbyTextIndexApp.java:36)
        at DerbyTextIndexApp.main(DerbyTextIndexApp.java:216)

 The code of the flushBuffer method is as follows 

   public void flushBuffer ( byte [ ] b, int len )
   throws IOException

   { final String sql = "SELECT CONTENT FROM OFFLINE_REPOSITORY"
      + " . TEXT_INDEXES WHERE URL = ? FOR UPDATE";
 
     PreparedStatement prepared; ResultSet results; Blob blob
      = null;
     
     final long position = 1 + super . getFilePointer ( ); 

     try // THE REQUIRED setBytes METHOD NOT IMPLEMEMTED BY DERBY, 
         // calling it simply throws an SQLException!

      { prepared = connection . prepareStatement ( sql );
        prepared . setString ( 1, url ); 
        results = prepared . executeQuery ( );

        while ( results . next ( ) ) blob
         = results . getBlob ( 1 );

        blob . setBytes ( position, b, 0, len );
        
        results . close ( ); prepared . close ( ); 
        connection . commit ( );
      }

     catch ( SQLException exception )

      { String message = "flushBuffer () Exception:"
         + " IndexOutput: " + exception . getMessage 
         ( ); throw new IOException ( message );
      }
   } 


 This code is part of a DerbyIndexOutput class that extends the Lucene (abstract) IndexOutput class, itself used by the Lucence Directory class for storing (persisting) a Lucene index. I already have a URLConnection that can access Derby Blobs as Files, and have tested a DerbyIndexInput implementation using the JDBC Blob . getBytes (...) method (properly i.e. functionally implemented in Apache Derby. The missing methods are needed for a complete JDBC-compliant database. This is an urgent project for us (though there are obvious work-arounds). A quick reply would, therefore, be much appreciated!


 Best Wishes,
 Keith McFarlane

_____________________________________________________________________________________________________________