Estou aprendendo agora a mexer com banco de dados, e estou tendo algumas dificuldade.
Criei uma classe que irá fazer tudo referente ao banco de dados, como inserir,excluir, listar.
Porém, não estou conseguindo listar os dados em outra classe, apenas na do banco de dados.
Coloqueri um System.ou.println() e da certo, ele consegue imprimir, porém, eu não quero que ele imprima a partir dessa classe, e sim de outra, pois , a idéia é futuramente colocar os dados em uma tabela, e com isso, acredito que não seria possível colocar a partir dessa classe
Segue a classe
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package bancoDeDados;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import store.Cliente;
import store.Endereco;
public class BancoDeDados {
private String DRIVER = "com.mysql.jdbc.Driver";
private String URL = "jdbc:mysql://127.0.0.1/teste";
private String USERNAME = "root";
private String PASSWORD = "fred";
private Connection conn;
public BancoDeDados(){
// método construtor quando chamado já irá se conectar ao banco de dados
try {
Class.forName(this.DRIVER);
this.conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (ClassNotFoundException e){
System.out.println("Não foi possivel encontrar o driver de banco: " + e.getMessage());
} catch(SQLException e){
System.out.println("Erro ao conectar com o banco: " + e.getMessage());
}
}
public void listarUsuarios(){
// lista os usuarios cadastrados
Statement stmt = null;
ResultSet rs = null;
// query que será executada
String sql = "SELECT * FROM fred.Cliente";
try {
stmt = this.conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("Nome"));
}
} catch(SQLException e){
System.out.println("erro listando usuarios: " + e.getMessage());
} finally {
try {
// fecha o stmt e o rs
if(stmt != null) stmt.close();
if(rs != null) rs.close();
} catch (SQLException e){
System.out.println("erro ao tentar fechar o stmt e o rs: " + e.getMessage());
}
}
}
O que você precisa fazer é obter o resultado do banco, e jogar para uma estrutura, normalmente utilizado o List.
Por exemplo, aqui
while(rs.next()){
System.out.println(rs.getString("Nome"));
}
Você poderia fazer algo como
List<String> usuarios = new ArrayList<String>();
while(rs.next()){
usuarios.add(rs.getString("Nome"));
}
return usuarios;Claro mudando o tipo de retorno do seu método para List e na outra classe… chamar este metodo e imprimir o List que vem de retorno.
Outra coisa que tbm é utilizado é jogar para uma List, mas neste caso você teria que ter uma classe que representa um usuario no seu sistema
Procurei não fazer o código, e apenas dar algumas dicas, assim você consegue ver onde errou e melhorar o código.
Caso tenha duvidas sobre o que passei, vai postando que vamos ajudando…
Cara, mt obg.
Deu certinho do jeito que eu precisava.
Agora porém, gostaria de buscar uma linha no banco de dados de acordo com o nome passado
Não estou sabendo como associar o objeto do tipo cliente, ao retorno do banco de dados.
Coloquei uma classe cliente cm vc me disse;
public Cliente buscarUsuario(String nome){
Cliente cliente = new Cliente();
Statement stmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM fred.Cliente WHERE Telfixo ='" + nome + "'";
try {
stmt = this.conn.createStatement();
rs = stmt.executeQuery(sql);
//SERIA AQUI? cliente = ??
} catch(SQLException e){
System.out.println("erro listando usuarios: " + e.getMessage());
} finally {
try {
if(stmt != null) stmt.close();
if(rs != null) rs.close();
} catch (SQLException e){
System.out.println("erro ao tentar fechar o stmt e o rs: " + e.getMessage());
}
}
return cliente;
}
É exatamente ai mesmo, perfeito.
Não conheco a estrutura da sua classe Cliente, mas vamos imaginar que ela tenha 2 atributos (Nome, Idade), você vai fazer algo assim.
stmt = this.conn.createStatement();
rs = stmt.executeQuery(sql);
cliente.setNome(rs.getString("Nome"));
cliente.setIdade(rs.getInteger("Idade"));
Ou pode criar um constructor com os parametros necessários para um cliente ser valido na regra de negocio da sua aplicação
stmt = this.conn.createStatement();
rs = stmt.executeQuery(sql);
cliente = new Cliente(rs.getString("Nome"), rs.getInteger("Idade"));
E la em cima você apenas cria o atributo Cliente cliente; porem precisa tomar cuidado, porque caso nao retorne nenhum registro, o objeto cliente vai ser NULL.
Mas é isto ai, vai tentando e na duvida vai postando !!!
Att
Perfeito astork,
era exatamente isso que estava faltando
Mt obg mais uma vez.
Agora só falta implementar as classes swing, em especial a de tableModel, pois já vi mts aki falando sobre o default table model.
Problema é que não sei nem praonde vai.
Você sabe?