O problema é que a variável conn está declarada dentro do try e você está tentando utilizá-la fora dele.
Faça da declaração das variáveis fora do try ou feche a conexão dentro do try.
[quote=sgaothaich]O problema é que a variável conn está declarada dentro do try e você está tentando utilizá-la fora dele.
Faça da declaração das variáveis fora do try ou feche a conexão dentro do try.
String driver = "com.mysql.jdbc.Driver"; //Classe do driver JDBC
String banco = "xxx"; //Nome do Banco criado
String usuario = "usuario"; //Usuário do banco
String senha = "senha"; //Senha de conexão
String str_conn = "jdbc:mysql://" + ip + ":3306/" + banco; //URL de conexão
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
Class.forName(driver);
conn = DriverManager.getConnection(str_conn, usuario, senha);
stmt = conn.createStatement();
String sql = "SELECT id, destino, cliente FROM active_calls where agente = '" + agente + "'";
rs = stmt.executeQuery(sql);
return (rs);
}
catch (ClassNotFoundException ex) {
System.out.println("Não foi possível carregar o driver.");
ex.printStackTrace();
return null;
}
catch (SQLException ex) {
System.out.println("Problema com o SQL");
JOptionPane.showMessageDialog(null, "Não foi possivel conectar ao banco de dados","", JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
return null;
} finally{
conn.close();
rs.close();
stmt.close()
}[/code][/quote]
Quando eu inseri o seu código o Netbeans pede “adicionar clausula throws para java.sql.SQLException”. Eu adiciono e fica ok, mas uma outra classe que instancia um objeto desta também pede throws para java.sql.SQLException:
ResultSet resultado = conect.conecta(agente,ip);
Quando eu adiciono o throws na outra classe dá erro.
Será que o problema não é porque além de fechar a conexão e a sessão também está sendo fechado o resultSet, no caso acho que seria melhor você alterar esse metodo para que em vez de retornar o resultSet retornasse um objeto pronto.
Pedro, a clausula throws relança o erro pra quem efetuou a chamada do método. Isso quer dizer que tu tens que tratar a exceção (try/catch) onde tu faz a chamada do método conecta.
Realmente o Charles tem razão. Seria mais interessante retornar uma List evitando utilizar objetos de acesso ao banco(ResulSet) fora das classes de persistência.
Pedro, a clausula throws relança o erro pra quem efetuou a chamada do método. Isso quer dizer que tu tens que tratar a exceção (try/catch) onde tu faz a chamada do método conecta.
Realmente o Charles tem razão. Seria mais interessante retornar uma List evitando utilizar objetos de acesso ao banco(ResulSet) fora das classes de persistência.
[/quote]
Pelo que eu entendi você está me dizendo para mudar algo na classe a fim de ao invés de receber um ResultSet eu receba uma String por exemplo?
Se a tua query for retornar mais de uma linha tu podes criar um ArrayList de strings e retornar a lista. É melhor do que utilizar um objeto ResultSet na classe que chama o método.
Bom se tiver com um tempinho dá uma olhada na apostila fj21 da caelum, logo nos primeiros capítulos ele aborda conexão com banco de dados MySql e dá passo a passo tudo que a gente tá falando aqui.
Se a tua query for retornar mais de uma linha tu podes criar um ArrayList de strings e retornar a lista. É melhor do que utilizar um objeto ResultSet na classe que chama o método.[/quote]
Fiz a classe retornando um arraylist mas deu problema no momento de jogar esse resultado na janela do meu aplicativo.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Jan1C2.<init>(Jan1C2.java:39)
at Client.main(Client.java:21)
Esse erro aconteceu porque você excedeu o tamanho da lista, no Java List e array começam da posição 0 e não da 1, no caso para retornar os 3 tu tem que fazer assim
[quote=CharlesAlves]Esse erro aconteceu porque você excedeu o tamanho da lista, no Java List e array começam da posição 0 e não da 1, no caso para retornar os 3 tu tem que fazer assim
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Jan1C2.<init>(Jan1C2.java:39)
at Client.main(Client.java:21)
[quote=Pedro Ribeiro][quote=CharlesAlves]Esse erro aconteceu porque você excedeu o tamanho da lista, no Java List e array começam da posição 0 e não da 1, no caso para retornar os 3 tu tem que fazer assim
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Jan1C2.<init>(Jan1C2.java:39)
at Client.main(Client.java:21)
[/quote]
se realmente fizesse do jeito que tah ai em cima ainda tais colocando o 3 tem que ser de 0 a 2 ai ele pega os três primeiros elementos.
[quote=CharlesAlves][quote=Pedro Ribeiro][quote=CharlesAlves]Esse erro aconteceu porque você excedeu o tamanho da lista, no Java List e array começam da posição 0 e não da 1, no caso para retornar os 3 tu tem que fazer assim
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Jan1C2.<init>(Jan1C2.java:39)
at Client.main(Client.java:21)
[/quote]
se realmente fizesse do jeito que tah ai em cima ainda tais colocando o 3 tem que ser de 0 a 2 ai ele pega os três primeiros elementos.[/quote]
Realmente, coloquei como estava escrito e funcionou. Resolvido, valeu pessoal.