Olá pessoal,
depois de ter uma otima ajuda do grupo de como resolver o problema de como consultar o campo tipo Clob do Oracle para visualizar o texto com quebra de paragrafo em uma pagina HTML. Agora estou tendo o mesmo tipo de problema para gravar no campo Clob, ou seja, a gravação perde a quebra de paragrafo, amuntuando o texto.
Gostaria de pedir ajuda dos colegas em mais essa pendega.
valeu a dica sobre o PrepareStatement, andei fazendo umas pesquisadas sobre o mesmo fiz uns testes gosei, muito bom.
Mas infelizmente não consegui fazer funcionar a dica de como trabalhar com a linha: "java.sql.Clob clob = new SerialClob(str.toCharArray());"
deu problema, será que tem algo que deixei escapar ?
O codigo de teste segue abaixo para uma possivel analise.
Grato.
package br.com.conpro.web;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.sql.rowset.serial.SerialClob;
import br.com.conpro.negocios.ConexaoOra;
public class TestePrepareStatement {
public static void main(String[] args) {
Connection conn = ConexaoOra.obterConexao();
String str = "andamento do processo";
try{
java.sql.Clob clob = new SerialClob(str.toCharArray());
PreparedStatement stmt = conn.prepareStatement("insert into tabela1(campo1, campo2) values(?,?)");
stmt.setString(1, "valor");
stmt.setClob(2, clob);
stmt.executeUpdate();
}
catch (SQLException e) { System.out.print("Mensagem do sistema: "+e.getMessage() ) ; return; }
System.out.print("Gravado com sucesso...");
}
}
Olá NBLUIS,
com todo respeito, mas achei muito confuso é complicado a pagina sugerida. Andei tentado fazer uns tentativa seguindo a pagina mas sem sucesso.
Cara, a ultima vez que eu fiz isso(faz algum tempo), peguei uma documentação da oracle que indicava o seguinte.
Primeiro faz a inserção e no campo da foto coloca o empty_blob, depois faz um select e obtem um objeto blob para só então carrega-lo.
Abaixo um exemplo do meu codigo que achei aqui, ele salvava uma foto no banco oracle…
Statement stm;
ResultSet rs;
Connection conn = getConnection();
Blob blob;
stm = conn.createStatement();
stm.executeUpdate("insert into fotos(foto) VALUES(empty_blob())");
conn.setAutoCommit(false);
rs = stm.executeQuery("select foto from fotos for update");
if (rs.next()) {
blob = rs.getBlob(1);
} else {
throw new Exception("Erro ao carregar manipulador de imagens");
}
byte[] buf = new byte[10 * 1024];
InputStream in = new FileInputStream(new File(arquivo));
OutputStream out = ((oracle.sql.BLOB) blob).getBinaryOutputStream();
int read = 0;
while ((read = in.read(buf)) != -1) {
out.write(buf, 0, read);
}
in.close();
out.close();
rs.close();
conn.commit();
conn.setAutoCommit(true);
Olá Ramilani, Desculpe ai o meu fraco Java, ainda não estou familiarizado com toda logica da programação Java. O que é extamente “exception lançada” ?[/quote]
Olá Carlos em qual IDE vc está trabalhando?
Exception é algum tipo erro que aconteceu em fluxo ou seja são situações excepcionais e geralmente indesejáveis que podem ocorrer durante a execução de um programa
agora saquei o que é exception, e estou sim usando exception:
Connection conn = ConexaoOra.obterConexao();
String str = "andamento do processo";
try{
java.sql.Clob clob = new SerialClob(str.toCharArray());
PreparedStatement stmt = conn.prepareStatement("insert into tabela1(campo1, campo2) values(?,?)");
stmt.setString(1, "valor");
stmt.setClob(2, clob);
stmt.executeUpdate();
}
catch (SQLException e) { System.out.print("Mensagem do sistema: "+e.getMessage() ) ; return; }
System.out.print("Gravado com sucesso");
}
}
Estou usando Eclipse.
Quando eu executo no Eclipse para testar a classe aparece no console:
Exception in thread “main” java.lang.ClassCastException: javax.sql.rowset.serial.SerialClob cannot be cast to oracle.sql.CLOB
at oracle.jdbc.driver.OraclePreparedStatement.setClob(OraclePreparedStatement.java:2096)
at br.com.conpro.web.TestePrepareStatement.main(TestePrepareStatement.java:31)
o que compreendi na sua explicação é que está errado. Já estava mesmo disconfido que estava “misturando as bolas”
Já estou com esse problema a três dias e já estou ficando descorçoado, o que já andei pesquisando no Google não é brincadeira. Então se não for pedir muito, você ou alguns outro colega poderia informar um exemplo da sintaxe de como gravar em um campo CLOB onde a quebra de paragrafo não se perca.