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?