private static final String sql = "SELECT ESPL_CODIGO AS Codigo, ESPL_DESCRICAO as Descricao FROM LIVRETO, ESPECIALIDADE_LIVRETO WHERE LIVR_ESPL_CODIGO = ESPL_CODIGO GROUP BY ESPL_CODIGO, ESPL_DESCRICAO ORDER BY ESPL_DESCRICAO";
/**
* @param args
*/
public static void main(String[] args) {
ConnectionDB dados = new ConnectionDB();
Connection con = dados.openConnection();
int charId = CharacterSet.UTF8_CHARSET;
CharacterSet charset = CharacterSet.make(charId);
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
System.out
.println("+---------------------------------------------------------------+");
while (rs.next()) {
String cod = rs.getString("Codigo");
CHAR des = new CHAR(rs.getString("Descricao"),charset);
System.out.println("| Código: " + cod + " Descrição: " + des);
System.out
.println("+---------------------------------------------------------------+");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
dados.closeConnection();
}
}
}
e o valor retornado é o seguinte:
±--------------------------------------------------------------+
| Código: 198 Descrição: TONOMETRIA DE APLANAC?O
±--------------------------------------------------------------+
quando deveria ser
±--------------------------------------------------------------+
| Código: 198 Descrição: TONOMETRIA DE APLANAÇÃO
±--------------------------------------------------------------+
alguem pode me ajudar
eh possivel que o charset do oracle nao esteja setado para utf8, nesse caso, quando o dado foi inserido no oracle eh que ele “estragou”, e o seu select ja vai vir “estragado”, e nao tem nada no java que vc possa fazer para consertar isso.
tenta dar esse select na mão (pelo sqlplus ou similar) e veja o que aparece… se estiver com o ? no lugar do acento é o oracle mesmo, dai da uma pesquisada como trocar charset do oracle…
essa saida vc ta vendo no DOS? tenta criar um arquivo HTML com essa saida, pode ser que o java esteje tratando tudo corretamente e seje erro somente na hora de mostrar a string.
Qual o charset e language do banco de dados (Oracle)?
Qual o valor da propertie file.encoding da máquina que você está rodando?
Qual o tipo da coluna ESPL_DESCRICAO no Oracle?
O objetivo deste código é converter os caracteres de saída em UTF-8 independente do charset que foi gravado no banco?
Então cara o charset do banco é WE8ISO8859P9 e a language é AMERICAN_AMERICA.WE8ISO8859P1
A propriedade do file.encoding eu ñ sei te falar
A coluna ESPL_DESCRICAO é varchar2
E meu objetido é exibir os dados na tela com os caracteres acentuados e tal, como está no banco.
Cara ainda ñ rolou ele começa a exibir os dados e quando chega na hora de exiber os dados com caracteres acentuados ele para e joga um erro na tela que é o seguinte
+---------------------------------------------------------------+
| Código: 78 Descrição: CARDIOTOCOGRAFIA FETAL
+---------------------------------------------------------------+
| Código: 81 Descrição: CATETERISMO URETRAL
+---------------------------------------------------------------+
java.sql.SQLException: Cannot map Unicode to Oracle character.
at oracle.sql.converter.CharacterConverter1Byte.toOracleCharacter(CharacterConverter1Byte.java:150)
at oracle.sql.converter.CharacterConverter1Byte.toOracleString(CharacterConverter1Byte.java:236)
at oracle.sql.CharacterSetWithConverter.convert(CharacterSetWithConverter.java:144)
at oracle.sql.CHAR.<init>(CHAR.java:109)
at TestaBanco.main(TestaBanco.java:35)
sou novo no forum mas deparo-me com a mesma excepção ao tentar passar dados de um XML para a BD Oracle.
Neste contexto, a codificação é UFT-8 (XML) para ISO-8859-15 (DB Oracle).
Faço o encoding da string…penso que está correcto
byte[] bs = xml.getValor().getBytes(“ISO-8859-15”);
String s = new String (bs, “ISO-8859-15”));
Quando vou a registar a string no OCS dá-me a mesma excepção que te dava a ti.
java.sql.SQLException: Cannot map Unicode to Oracle character
Podes-me dizer de como resolveste a tua situação? Ando já há 3 dias a tentar resolver esta situação e nada… :S