Dúvida simples com banco de dados e java[RESOLVIDO]

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

    }



    

Vasco.fred

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…

Att

Astork

Vou tentar implementar,
caso tenho dúvidas, tento aqui de novo.

obg e abraços.

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

vasco.fred

É 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

Astork,
deu errado.
Eis os modos como estão e o resultado.

Banco de dados

public Cliente buscarUsuario(String nome){
        Cliente cliente = new Cliente();
        Endereco end = new Endereco();
        Statement stmt = null;
        ResultSet rs = null;

        // query que será executada
        String sql = "SELECT * FROM fred.Cliente WHERE Telfixo ='" + nome + "'";

        try {
            // executa a query e guarda o resultado no RecordSet rs
            stmt = this.conn.createStatement();
            rs  = stmt.executeQuery(sql);
            cliente.setNome(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());
            }
        }
        return cliente;
    }
banco = new BancoDeDados();
Cliente clienteAux = banco.buscarUsuario(campoBusca);
System.out.println(clienteAux.getNome());
banco.desconectar();

Eis que imprimiu o seguinte erro:

erro listando usuarios: Before start of result set
null

esqueci de colocar o valor de campo busca
String campoBusca = “fred”;

vasco.fred.

No post anterior esqueci de colocar o while(rs.next()){ , tente colocar isto e veja se resolve…

stmt = this.conn.createStatement(); rs = stmt.executeQuery(sql); while(rs.next()){ cliente.setNome(rs.getString("Nome")); }
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?

vasco.fred

Blz que funcionou, é bom até editar seu primeiro post e acrescentar no titulo (Resolvido).

Referente a TableModel de fato é uma pessima ideia utilizar, embora não ter trabalhado muito com isto, segue o link que o pessoal discutiu isto bastante.
http://www.guj.com.br/java/199067-redimensionar-jtable—pra-variar–resolvido-/2#1001295

Boa sorte nos estudos,

Att