Exemplo firebird banco de dados com acento

seguinte, não lembro em qual topico eu prometi um exemplo de conexão com o firebird com acentos, então, ai vai :slight_smile:

o código a seguir funcionou perfeito aqui, eu rodei ele com todos os jars do driver do firebird no classpath, provavelmente ai vocês terão que ajustar algumas pequenas coisas como o caminho do banco de dados ja que o exemplo ta usando um banco de dados aqui no meu servidor :slight_smile:

package br.com.usiinformatica.fb_example;

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();
		}
	}

}

a metadata da tabela altamente complexa do exemplo ta ai :slight_smile:

create table TESTE_ACENTO( TESTE varchar(30) character set ISO8859_1 not null collate ISO8859_1);

tentei utilizar o marathon para inserir dados na tabela, mas ele não sabe trabalhar com character sets diferentes do default,

na verdade, da para utilizar praticamente qualquer character set, basta ter um character set explicito (pode ser até para o banco todo e não para a coluna como estou utilizando aqui) e se utilizar algum character set na conexão para que o driver possa fazer a tradução, não tenho certeza se pode ser um characterset diferente nos dados e na conexão, no driver diz que pode, mas esta é uma feature nova, então pode não estar funcionando corretamente ainda :slight_smile:

ahh, se alguem conseguir adivinhar qual o characterset default do FB ou do IB poste aqui para colaborar com a galera, eu não achei esta informação :slight_smile:

ahh, mais uma coisa, da para ver que o é problema na implementação do marathon pois ele consegue ler e não consegue escrever caracteres especiais em colunas criadas por ele mesmo com um characterset explicitado :slight_smile: