Trabalhando com JDBC/FireBird

Boa tarde pessoal! Estou tendo alguns problemas com a conexão Firebird. Meu ambiente é o seguinte: (Windows XP, Firebird 1.0, Eclipse 3.0, MVC, TomCat 4.1.29)

Bom tenho uma classe para conexão (ConectaFB), uma para tratar os dados (Gerente), um para a lógica de execução do programa (BeanGerente), e algumas páginas JSP para interface.

Quando faço a conexão com o Firebird e faço uma consulta recebo esta mensagem no console do TomCat:

log4j:ERROR No appenders could be found for category <org.firebirdsql.jca.IdleRemover>.
log4j:ERROR Please initialize the log4j system properly

? mas a página é exibida corretamente. Por que ocorre este erro? Como corrijo? :cool: :?:

Outro problema é quando vou gravar, ocorre o seguinte erro no console:

Falha no BeanGerente: org.firebirdsql.jdbc.FBSQLException: GDS Exception. Dynamic SQL Error
SQL erro code = -104
Token unknown ? line 1, char 92
8132

A página não altera quando clico no botão salvar. Novamente, por que isso está ocorrendo? Alguém tem idéia de como corrijo? :?: :cool: :idea:

Grato,
Francisco

O primeiro erro é facil…
A classe org.firebirdsql.jca.IdleRemover do seu “driver” JDBC deve utilizar alguma instrução lo log4j para logar possíveis erros ou warnings…
Para corrigir esse erro, basta adicionar a biblioteca log4j-1.2.8.jar dentro do diretório commons/lib do seu tomcat…
Lembrando que esse erro que está acontecendo não prejudicará seu sistema em si…

O segundo erro creio que seja algo relacionado diretamente ao seu código…
poste aqui para nós a sua classe onde você efetua o insert na tabela…

[]'s

Ola Casperbox.

Quanto ao segundo erro, por acaso voce esta tentando gravar informacoes acentuadas? Se for isso, provavelmente o seu problema e que vc conectou ao banco de dados sem fornecer o tipo de charset que ele deve utilizar. Vc informa o tipo de charset criando um objeto properties, que devera conter o nome do usuario, senha, e o charset, e passa como parametro na classe de conexao.

Agora nao lembro da sintaxe, mais assim que chegar em casa eu posto aqui.

Quanto ao primeiro erro, lhe pergunto: Vc disponibilizou para o Tomcat todas os JAR do jdbc do firebird necessarias? E que no jdbc do firebird tem um subdiretorio chamado lib. Todas os JAR deste subdiretorios devem ser disponibilizados para o Tom Cat. Um destes JAR inclusive e o log4j.

Ola Casperbox, desculpe pela deromra.

Segue abaixo a sintaxe que utilizo para conectar:

        propriedades.setProperty("user", "SYSDBA";    
        propriedades.setProperty("password", "masterkey";    
        propriedades.setProperty("lc_ctype", "WIN1252");  // aqui defino o dicionário a ser utilizado
        propriedades.setProperty("SQL_dialect", "3");    
        
        con = DriverManager.getConnection( url, propriedades);
        con.setAutoCommit(false); // Aqui defino que o controle de transação sera manual.
        stm = con.createStatement( );

Qualquer dúvida é só perguntar.

[]'s

Caio Tácito

Ola Casperbox, desculpe pela deromra.

Segue abaixo a sintaxe que utilizo para conectar:

        propriedades.setProperty("user", "SYSDBA";    
        propriedades.setProperty("password", "masterkey";    
        propriedades.setProperty("lc_ctype", "WIN1252");  // aqui defino o dicionário a ser utilizado
        propriedades.setProperty("SQL_dialect", "3");    
        
        con = DriverManager.getConnection( url, propriedades);
        con.setAutoCommit(false); // Aqui defino que o controle de transação sera manual.
        stm = con.createStatement( );

Qualquer dúvida é só perguntar. :wink:

Pessoal muitissimo obrigado! Deu tudo certo.
Vcs até acrescentaram coisas que eu não sabia sobre o charset.

Valeu demais.

Até +,
Francisco :lol:

Opss!! Desculpe, mas tem uma coisa. Como defino:

propriedades.setProperty(“lc_ctype”, “WIN1252”); // aqui defino o dicionário a ser utilizado
propriedades.setProperty(“SQL_dialect”, “3”);

No código abaixo:

public static Connection getConexao() throws Exception {

    boolean FBDriverLoaded = false;
	org.firebirdsql.jdbc.FBWrappingDataSource fbwds = null;
	
	if (!FBDriverLoaded) {
	    try {
			fbwds = new org.firebirdsql.jdbc.FBWrappingDataSource();
			FBDriverLoaded = true;
		} catch (Exception e) {
			System.out.println(
				"Could Not create org.firebirdsql.jdbc.FBWrappingDataSource, error: "
					+ e
					+ "\n");
		}
		fbwds.setDatabase("localhost:D:\\projetos\\parrot\\bd\\parrot.gdb");
		fbwds.setUserName("SYSDBA");
		fbwds.setPassword("masterkey");
		fbwds.setIdleTimeoutMinutes(30);
		fbwds.setPooling(true); // Ativa pooling para esta fonte de dados.
		fbwds.setMinSize(5);
		// Seta o numero minimo de conexoes mantidos no pool.
		fbwds.setMaxSize(30);
		// Seta o numero maximo de conexoes que podem ser abertas ao mesmo tempo.
		try {
			fbwds.setLoginTimeout(10);
		} catch (SQLException e) {
			System.out.println(
				"Could not set Login Timeout in SQLDriver, error: "
					+ e
					+ "\n");
		}

	} else {
		System.out.println(
			"Firebird Driver already exists, not reloaded.\n");
	}
	return fbwds.getConnection();
}

Grato,
Francisco :oops:

Francisco,

infelizmente não poderei lhe ajudar, pois nunca utilizei um pool de conexões. Ainda estou engatinhando nesta linguagem :slight_smile:

Mais acredito que os outros colegas poderão lhe dar a devida ajuda.

Mesmo assim, tente dar uma procurada nas mensagens anteriores deste grupo, na seção de tutoriais, em outros sites especializados em java como www.javafree.com.br, www.guj.com.br entre outros, e na própria internet através do google.

Boa sorte na sua aplicação.

Obrigado, Caio! Valeu.

Tb esto engatinhando em Java, nem sabia que estava fazendo um pool de conexão. Apenas estou usando o exemplo fornecido pela API com algumas alterações. Mas de qualquer forma valeu mesmo.

Até mais,
Francisco :cool: