Ola Galera,
Preciso transportar um tipo de dado “bytea” do “postgres” de uma pagina jsp p/ outra utilizando POST e neste transporte o dado no destino esta diferente da origem.
Aparentemente o problema está no método encode, então para não ficar complexo o exemplo criei uma pagina jsp simples que faz a leitura do dado no banco, faz o encode e em seguida faz um decode p/ gravar novamente banco, assim simulo a situação real.
No exemplo abaixo faço a leitura do seguinte dado:
\247\377\001\036\005\001j\000\001\215\000\022\001\217…
Ao gravar ele fica da seguinte forma:
\247\377\001\036\005\001j\000\001?\000\022\001?\000\0016
Esses dados vejo no proprio postgres (pgadmin), soh lembrando eh um campo do type bytea.
Ja tentei modificar o encode usando utf8, iso tanto no banco quanto no metodo URLEncoder e nada adiantou.
Estou postando o codigo abaixo, agradeço desde já pela ajuda:
<%@ page import=“java.io.ByteArrayInputStream” %>
<%@ page import=“java.net.URLEncoder” %>
<%@ page import=“java.net.URLDecoder” %>
<%@ page import=“java.sql.*” %>
<%@ page language=“java” contentType=“text/html; charset=utf8” %>
<%
/*
Valor Original: \247\377\001\036\005\001j\000\001\215\000\022\001\217…
Valor Gravado: \247\377\001\036\005\001j\000\001?\000\022\001?\000\0016…
*/
// carrega driver
Connection connection;
ResultSet resultSet;
PreparedStatement preparedStatement;
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection("jdbc:postgresql://localhost/operadora2", "postgres", "123456");
byte buffer_bd[];
String filebytes = "";
String retorno = "";
String sql = "select clidig_digital from cli_digital where clidig_id = 3";
resultSet = connection.createStatement().executeQuery(sql);
if (resultSet.next()){
// extraindo do banco
buffer_bd = resultSet.getBytes("clidig_digital");
resultSet.close();
filebytes=new String(buffer_bd);
filebytes = URLEncoder.encode(filebytes, "UTF-8");
// gravando de volta no banco (aqui seria a outra pagina jsp que recebera o dado via post)
retorno = URLDecoder.decode(filebytes, "UTF-8");
byte[] bretorno = retorno.getBytes();
preparedStatement = connection.prepareStatement("INSERT INTO CLI_DIGITAL (cli_id, clidig_digital) values (?, ?)");
preparedStatement.setInt(1, 1);
preparedStatement.setBytes(2, bretorno);
preparedStatement.executeUpdate();
}
connection.close();
%>