Inserir bytes[] em coluna CLOB

Bom dia a todos.
Estou tentando inserir um arquivo exemplo (ccleaner.exe) no banco de dados oracle.

A variavel “conn” já está com os pools de conexão.
Metodo para salvar o arquivo

private void inserir(Arquivo arquivo) throws SQLException {
 PreparedStatement pstmt = null;
        String sql = "INSERT INTO "
                + "ARQUIVO (NOME, BINARIO, TAMANHO) "
                + "VALUES (?, ?, ?)";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, arquivo.nome);
            pstmt.setBytes(2, arquivo.binario);
            pstmt.setLong(3, arquivo.tamanho);
            pstmt.executeUpdate();
           } catch (SQLException ex) {
            Logger.getLogger(UploadArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
}

classe que converte o arquivo para array de bytes:

    private byte[] fileToByte(File arquivo) throws IOException {
        FileInputStream fis = new FileInputStream(arquivo);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[8192];
        int bytesRead = 0;
        while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
            baos.write(buffer, 0, bytesRead);
        }
        return baos.toByteArray();
    }

Se eu usar o pstmt.setBytes o slacktrace retorna este erro do oracle (ORA-01461: can bind a LONG value only for insert into a LONG column)
Tentei usar a classe CLOB usando algo parecido com isto, substituindo o pstmt.setBytes(2, binario) para pstmt.setClob(2, clob)

CLOB clob = new CLOB((OracleConnection) conn, arquivo.binario);
pstmt.setClob(2, clob);

Mas ai dá esse erro:
“org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection”

Tem mais alguma coisa que falta fazer?

Uma conexão obtida do “connection pool” aponta não para o objeto conexão retornado pelo driver do banco, e sim para um outro objeto que toma conta do pool.

Normalmente você pode obter a conexão “subjacente” fazendo os casts adequados e chamando os métodos adequados para obter sua OracleConnection.

Por exemplo, você viu que o objeto conexão é do tipo “org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper”, ou seja, você está usando o DBCP.

Isso quer dizer que você tem de olhar a documentação do DBCP para ver como obter essa conexão.

http://www.coderanch.com/t/87657/Tomcat/underlying-connection

Outro senão. Uma coluna CLOB é feita para armazenar caracteres, não bytes, e como você deve saber um char = 2 bytes, não 1

Tente uma coluna BLOB ou LONG

[quote=entanglement]Outro senão. Uma coluna CLOB é feita para armazenar caracteres, não bytes, e como você deve saber um char = 2 bytes, não 1

Tente uma coluna BLOB ou LONG[/quote]

Vou pedir para o DBA alterar a coluna BINARIO para BLOB, deve ser por isso que é dificil achar algo como “inserir binario em CLOB”, mas era sempre aqueles txt.
Vlw.