to fazendo debug, e consigo ver o conteúdo dele dentro das variáveis…
mas na hora de salvar dentro do campo bytea, eu não sei qual tipo de variavel devo enviar, pois nenhuma delas está sendo salva… ele está inserindo um novo registro, sem nenhuma informação no campo que deveria ser a imagem.
tentei string, byte[] e InputStream, mas esses não funcionaram (ou eu não soube fazê-lo).
Nos códigos que postei acima, está a forma como tentei…
eu tenho que migrar de um oracle pra um postgres, mais de 10000 imagens, que estavam em um sistema em delphi… preciso conseguir ler estes arquivos e gerar as imagens, além de salvar imagens no mesmo formato.
Olha, eu tive que guardar no banco por requisitos mesmo do sistema, mas no GUJ existem muitas pessoas que aconselham veementemente a guardar apenas um link do arquivo no banco, e salvar a imagem no SERVIDOR de arquivos (e não no banco). Veja se isso não cabe a vc…
Hahaha Eu estou te explicando o negócio do driver oracle.
É o seguinte: nas versões 8i e 9i do OJDBC não conseguem tratar campos clob/blob com mais de 4k. Segundo um tutorial do hibernate, vc tem vários workarounds, ou mesmo simplesmente baixar a versão 10g do OJDBC. Teoricamente ela funciona bem com a versão 9i do banco, e até agora tem funcionado bem com o 8i para mim.
private Connection con;
private Statement stmt;
private String trace;
/**
* Setup database connection and create SQL statement
*/
public void init( ServletConfig config ) throws ServletException
{
// Try database connection
try{
// The call to Class.forName explicitly loads the driver class
//Class.forName("org.gjt.mm.mysql.Driver");
Class.forName("org.postgresql.Driver").newInstance();
//jdbc:mysql://<HOST>:<PORT>/<DB>
//Connection con = DriverManager.getConnection("jdbc:mysql://localhost/mydb?user=''&password=''");
con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/banco","usuario","senha");
// Once a connection has been established we can create an instance
// of Statement, through which we will send queries to the database.
stmt = con.createStatement();
}
catch (Exception exception ) {
exception.printStackTrace();
throw new UnavailableException(exception.getMessage());
}
} // End init()
/**
* Forward to doGet
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
/*
* NOTE: doPost -> HTTP post requests | doGet -> HTTP get resuest
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
// Simple trace variable for debugging...
trace = "";
/*
SELECT *
FROM image
WHERE image.image_id = ?variable?
*/
try {
String SQL = "select * from testeimagem order by random() limit 1";
ResultSet rs = stmt.executeQuery(SQL);
rs.next();
Blob blob = null;
//blob = rs.getBlob("imagem");
response.setContentType("image/jpeg");
//InputStream in = blob.getBinaryStream();
InputStream in = rs.getBinaryStream("imagem");
OutputStream out = response.getOutputStream();
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
out.flush();
out.close();
}
catch (Exception exception ) {
System.out.println("Erro---> " + exception);
throw new ServletException("Error");
}
} // end doPost()
/*
* Close SQL statements & database connection
*/
public void destroy()
{
// Attempt to close statements and database connection
try{
stmt.close();
con.close();
}
// Handle database exceptions by returning error to client
catch (SQLException sqlException){
sqlException.printStackTrace();
}
} // End destroy()
} // End class showImage
[/code]
Era “wilson” então… hehehe
lol
valeu aí CintiaDR…
sobre o hibernate, tô ligado sobre o funcionamento… já utilizo em alguns sistemas… mas a preguiça de fazer a configuração dele, pra apenas alguns testes para um sistema, me fizeram não usar… hehehe
Poxa! com servlets realmente acho que funciona, mas como estou trabalhando com JSF gostaria de setar algum atributo do bean para apenas exibir a imagem em seguida.
Estou utilizando o UploadedFile do Tomahawk e grava sem problemas, porém, quando vou exibir a imagem que não estou conseguindo.