Could solve the problem by using the oci8 driver ...
still using JBoss-2.2.2
have now some problems with reserved column names, but seems to work fine.

Hope it is interresting for you ...

thanks for help,

regards,

        Thomas

-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]Im Auftrag von
Joost v.d. Wijgerd
Gesendet: Montag, 27. Mai 2002 15:36
An: [EMAIL PROTECTED]; Thomas Renninger
Betreff: RE: [JBoss-dev] CLOB - Oracle datatype only supports 4kb
writing


Hi,

I would advice upgrading to 2.4.x. We use our own BlobManager code that
loads database specific code to handle LOB data. After trying out different
approaches this seemed to be the best solution at the time. This is the code
we use to read and write (B)LOBs with the oracle thin driver:
<code>
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.sql.BLOB;

public class OracleBlobManager extends AbstractBlobManager {

  /*
   That method works fine but it's using oracle.sql.Blob because it provides
   the getBinayOutputStream().
  */
  public void createBlob(Connection conn, Long id, byte[] blob)
  throws BlobProcessingException {
    try {
      /* 2. insert empty_blob() locator */
      PreparedStatement pstmtInsert = conn.prepareStatement(
        "INSERT INTO " + this.tableName + " VALUES (?,EMPTY_BLOB())");
      pstmtInsert.setLong(1, id.longValue());
      pstmtInsert.executeUpdate();
      pstmtInsert.close();

      /* 3. get inserted locator */
      Statement stmtInsert=conn.createStatement();
      ResultSet rsInsert = stmtInsert.executeQuery(
        "SELECT blob_id FROM " + this.tableName
        + " WHERE ID=" + id + " FOR UPDATE");
      rsInsert.next();
      BLOB myBlob = (BLOB)rsInsert.getBlob(1);

      /* 4. update the blob */
      OutputStream newstreamOut = myBlob.getBinaryOutputStream(); // method
provided by oracle.BLOB
      newstreamOut.write(blob);
      newstreamOut.flush();
      newstreamOut.close();

      stmtInsert.close();

    } catch (SQLException e) {
// TEMPORARY OUTPUT
        e.printStackTrace();
      throw new BlobProcessingException("SQL problems with database",e);
    } catch (IOException e) {
// TEMPORARY OUTPUT
        e.printStackTrace();
      throw new BlobProcessingException("I/O problems with database",e);
    }
  }

    public void updateBlob(Connection conn, Long id, byte[] blob)
    throws BlobProcessingException, BlobNotFoundException {
        try {
            /* 2. get inserted locator */
            Statement stmtUpdate=conn.createStatement();
            ResultSet rsUpdate = stmtUpdate.executeQuery(
            "SELECT blob_id FROM " + this.tableName
            + " WHERE ID=" + id + " FOR UPDATE");
            if (rsUpdate.next()) {
                BLOB myBlob = (BLOB)rsUpdate.getBlob(1);

                /* 3. update the blob */
                OutputStream newstreamOut = myBlob.getBinaryOutputStream();
// method provided by oracle.BLOB
                newstreamOut.write(blob);
                newstreamOut.flush();
                newstreamOut.close();
            } else
                throw new BlobNotFoundException("Blob manager update failed.
"
                + "Row ID not found.");

            stmtUpdate.close();
            stmtUpdate = null;

        } catch (SQLException e) {
            throw new BlobProcessingException("SQL problems with
database",e);
        } catch (IOException e) {
            throw new BlobProcessingException("I/O problems with blob",e);
        }
    }

    byte[] getObject(ResultSet rs)
    throws ClassNotFoundException,SQLException,IOException {

        Blob b = rs.getBlob("blob_id");
        return b.getBytes( 1L, (int) b.length() );
    }
}
</code>

Note that we use oracle specific code. This code is part of a framwork, all
the stuff you are missing is standard to all database so you should be able
to figure it out for yourself.

Hope this helps.

Joost.


_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development



_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to