Erro com assentuação

2 respostas
S

Pessoal, tenho uma página em JSP feita em JBuilder e acessando o Firebird via ODBC, quando insiro dados no formulário usando acentos dá a seguinte mensagem:

“StandardWrapperValve[debugjsp]: Servlet.service() for servlet debugjsp threw exception
javax.servlet.ServletException: GDS Exception. arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets”

já sem acento a pagina funciona perfeitamente.

Algum pode dar uma dica?

2 Respostas

urubatan

seguinte, você tem que criar a conexão JDBC especificando qual o charset utilizado no banco de dados, eu mandei uma vez um exemplo sobre isto aqui pro guj mesmo :-)

mas é mais ou menos o seguinte:
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;
/**
 * @author Rodrigo
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class FBExample {

	public static void main(String[] args) {
		new FBExample().execute();
	}
	protected Connection getConnection(
		String user,
		String password,
		String database) {
		try{
		Class.forName("org.firebirdsql.jdbc.FBDriver");
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
		Properties p = new Properties();
		p.put("user",user);
		p.put("password",password);
		p.put("lc_ctype","ISO8859_1");
		try{
			return DriverManager.getConnection("jdbc:firebirdsql:" + database,p);
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}

	protected ResultSet execSQL(Connection con, String sql) {
		try{
			Statement s = con.createStatement();
			s.execute("insert into teste_acento values('ácento')");
			return s.executeQuery(sql);
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}

	protected void execute() {
		Connection c = getConnection("sysdba","masterkey","172.18.4.3/3050:/home/gdb/teste_fb1.gdb");
		ResultSet r = execSQL(c,"select * from teste_acento");
		try{
			while(r.next()){
				System.out.println(r.getString(1));
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}

o parametro lc_ctype indica o charset utilizado, é só utilizar o mesmo do banco de dados que resolve o problema, este problema ocorre por que o default do java é UTF-8 e o default do FB depende do SO do servidor :-)

E

Como configuro o parametro ‘lc_ctype’ se eu estiver fazendo a conexão do Banco pelo TomCat??

Valeu!!

Criado 15 de maio de 2003
Ultima resposta 20 de jun. de 2005
Respostas 2
Participantes 3