Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
opa, estou com alguns problemas para pegar dados do firebird no java, vejam o codigo como esta:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class FirebirdAccess {
public Connection con = null;
public Statement stm = null;
public ResultSet resultSet = null;
public void Conexao() {
try {
Class.forName("org.firebirdsql.jdbc.FBDriver");
con = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:/Users/paulo/teste.fdb","SYSDBA","123456");
stm = con.createStatement();
} catch (Exception e) {
System.out.println(e);
System.out.println("");
System.out.println("Não foi possível conectar ao banco: " + e.getMessage());
}
}
public void fetchAll(String query) {
try{
System.out.println("Exibindo resultados para a query: "+query);
Conexao();
resultSet = stm.executeQuery(query);
int j = 0;
while (resultSet.next()) {
System.out.println("entrei no while "+j+'x');
String label = "["+j+"]=>[";
for (int i = 1; i<= resultSet.getMetaData().getColumnCount(); i++){
label+=("["+resultSet.getMetaData().getColumnName(i)+"] => "+ resultSet.getString(resultSet.getMetaData().getColumnName(i))+" ");
}
label+= "]";
System.out.println(label);
j++;
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
essa eh minha classe, eu dou um new nela na no main e passo para o metodo fetchAll a query.
Tenho duas tabelas, t1 e t2; Se eu der um fetchAll em t3, recebo uma exception falando que tal tabela nao existe, e ela nao existe mesmo. Mas se eu der um fetchAll(Select * FROM t1) o resultSet.next() retorna false logo de cara, mas tem dados la, nao faz sentido, eu uso exatamente o mesmo codigo com o mysql, so muda a o driver, nao sei o que esta errado.. nao entra no while nunca no firebird...
pelo que eu vi esta conectando na base, ele da o erro se eu der select na t3 mas nao da erro se eu der select na t1, porem nao recebo nada de volta...Ola, obrigado ricci , entendi o que voce quis dizer, este era apenas um teste para ver como estavam as coisas, mas enfim, peguei uma versao anterior do jaybird e rodou, o mesmo codigo, agora vou arrumar as coisas e ainda tem um tal de hibernate que falam muito bem, mas vou por etapas :D
Ainda estou comecando no java, tenho uma certa dificuldade em declarar objetos no lugar certo, como voce mesmo citou, nao ha necessidade do resultset ser global...
abracos
Paulo,
Toda vez que você faz uma consulta ao banco, você carrega o drive e estabelece uma conexão.
Neste caso, acredito que seja necessário fazer isto apenas uma vez quando executa a classe.
Isto parece ser problema relacionado à instância do objeto resultSet.
Sugiro você fazer o método fechAll retornar um ResultSet, ao invés de alterar diretamente a variável global 'resultSet'.
E criar um método para impressão do resultSet. #Separar as coisas
Método de consulta:
public ResultSet fetchAll(String query) {
Método para impressão:
public void viewResultSet(ResultSet rs){
Quando você for executar a classe, pode fazer assim:
public FirebirdAccessTest{
public static void main(String args[]){
Não pude testar, mas é uma sugestão.