Ler dados no Banco de Dados[RESOLVIDO]

19 respostas
evertonsilvagomesjav

Ola galera, bom eu estou fazendo um cadastro simples no banco de dados, e gostaria de saber como ler esses cadastros no Banco, eu estava lendo sobre resultset mas nao entendi muito bem, gostaria de saber se tem como alguem me ajudar a ler os dados com base no que eu tenho:

package com.squadra.caixa.persistencia.entidade;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class BancoDeDados extends Thread{
		
		Connection conn;   
		Statement statement;   
		
		List<Cliente> listaClientes =  new ArrayList<Cliente>();
				
		public BancoDeDados(List<Cliente> listaClientes) {
			this.listaClientes = listaClientes;
							
			}
		
		public void run(){
			gravarCliente();
		}
			
			
			public void gravarCliente(){
				 	String usuario = "root";   
			        String senha = "palitodedente";   
			        String url = "jdbc:mysql://localhost:3306/javaprogrammer";   
			           
			        try {   
			            Class.forName("com.mysql.jdbc.Driver");   
			            conn = DriverManager.getConnection(url, usuario, senha);   
			            statement = conn.createStatement();     
			       
			           
			         for(int i = 0; i < this.listaClientes.size(); i++){   
			             String sql= "insert into cliente(nome, cpf)"+   
			             "values ('"+ this.listaClientes.get(i).getNome() +"', '"+ this.listaClientes.get(i).getCpf() +"')";     
			               
			            
			                statement.executeUpdate(sql);   
			                System.out.println(this.listaClientes.get(i).getNome() +"  "
			                				   +this.listaClientes.get(i).getCpf());   
			         }     			           			           			         
			            statement.close();   
			            conn.close();   
			        
			        } catch (ClassNotFoundException e) {   
			            e.printStackTrace();   
			        } catch (SQLException e) {   
			            e.printStackTrace();   
			        }   
			        
			    }   

}

Ajuda ae galera?

19 Respostas

thiago.correa

Dá uma lida nesse tutorial se mesmo assim você não entender posta de novo aí!

http://www.guj.com.br/article.show.logic?id=7

kenzard

Everton é bom voce ter uma classe para controlar somente isto, conexão com banco, desconectar e consultas sql para armazenar no result set, ae nesta classe é só voce ter um metodo para fazer a consulta sql e armazenar no result set. Veja:

public void executeSql(String sql) {
        try {
            statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            resultSet = statement.executeQuery(sql);
        } catch (SQLException sqlErro) {
            JOptionPane.showMessageDialog(null, "Verifique se informou o dado correto para pesquisa."+sqlErro);
        }
    }

Uma vez a consulta armazenada no result set voce pode recupera-las.

try {
                while (banco.resultSet.next()) {
                    System.out.println("O numero da conta é :"+banco.resultSet.getString("NumeroConta"));   
                }
            } catch (SQLException erro) {
                JOptionPane.showMessageDialog(null, "NÃO foi possivel conectar ao banco de dados");
              }
}

Espero ter ajudado :wink:

evertonsilvagomesjav

galera to perdidao tentei fazer com base no que vcs me passaram mas ta dando erro

ublic void exibirCliente(){
		String usuario = "root";   
        String senha = "palitodedente";   
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";   
        java.sql.ResultSet rs = null ;
        try{
        	Class.forName("com.mysql.jdbc.Driver");
        	Connection conn = DriverManager.getConnection(url, usuario, senha);
        	Statement statement = conn.createStatement();
        	
        	  
	        while(rs.next()){
	             rs =  statement.executeQuery("SELECT nome FROM cliente");
	              	                String nome = rs.getString("nome");
	        		System.out.println(nome);
	                			
	         }	     			           			           			         
	            statement.close();   
	            conn.close();   
       
        }catch (ClassNotFoundException e) {   
            e.printStackTrace();   
		
	}catch (SQLException e) {   
        e.printStackTrace();

	}
	}
evertonsilvagomesjav

o erro e um NullPointerException:

Exception in thread "main" java.lang.NullPointerException at com.squadra.caixa.persistencia.entidade.ResultSetBancoDeDados.exibirCliente(ResultSetBancoDeDados.java:22) at com.squadra.caixa.persistencia.entidade.Banco.leBancoDeDados(Banco.java:288) at com.squadra.caixa.persistencia.principal.Principal.main(Principal.java:150)

pedroroxd

Um exemplo simples pra você:

import java.sql.*;
public class ConectaBanco {

    public Connection conecta() throws ClassNotFoundException, SQLException {
        Connection connection = null;

        String driverName = "org.gjt.mm.mysql.Driver"; 
        Class.forName(driverName);

        String url = "jdbc:mysql://" + "localhost" + ":3306/" + "restaurante"; 
                  //restaurante é a tabela

        connection = DriverManager.getConnection(url, "root", "admin"); //root = usuario e admin = senha
        return connection;      //retorna conexão para você poder utilizar para incluir ou excluir linhas
    }
    
}
evertonsilvagomesjav

isso ai ta ok pedro quero. O problema e o resultset

pedroroxd

Tenho um exemplo de web aqui também…
Não muda muita coisa não, só as linhas 10 e 13…
Qualqr coisa pede ae…

Espero ter ajudado…
Se resolveu acrescente [RESOLVIDO] no assunto do tópico.
[]'s

pedroroxd

Nesse código você passa a conexão (que foi pegada na classe ConectaBanco no meu caso) e uma Defaut Table Model…
Então ele completa a tabela

public void criatabelao(Connection connection,javax.swing.table.DefaultTableModel modelo) throws SQLException, ClassNotFoundException {

Statement stmt = connection.createStatement();

 String sql2 = "Select * from cliente order by nome";
ResultSet rs = stmt.executeQuery(sql2);

    while(rs.next()) {
    String[] dados = new String[4];
    dados[0] = rs.getString("Id"); //id=nome da coluna
    dados[1] = rs.getString("Nome");
    dados[2] = rs.getString("Cpf");
    dados[3] = rs.getString("Endereço");
    modelo.addRow(dados); //adiciona uma nova linha na JTable;
    }
    }
evertonsilvagomesjav

Olha como ta meu cod:

public void exibirCliente(){
		String usuario = "root";   
        String senha = "palitodedente";   
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";   
        ResultSet rs = null;
        String nome = null;
        String driverName = "com.mysql.jdbc.Driver";
        int i =0;
        try{
        	Class.forName(driverName);
        	Connection conn = DriverManager.getConnection(url, usuario, senha);
        	Statement statement = conn.createStatement();
        	        	  
	        while(rs.next()){
	         
	        	String sql = "SELECT nome FROM cliente;"; 
	        		rs =  (ResultSet) statement.executeQuery(sql);
	            		String dados[] = rs.getString("nome"); // aqui eu quero que todos nomes da coluna nome vao para o array para ser exibido depois mais nao sei como =/
	            			
	                 		                			
	         }
	            statement.close();   
	            conn.close();   
       
        }catch (ClassNotFoundException e) {   
            e.printStackTrace();   
		
	}catch (SQLException e) {   
        e.printStackTrace();

	}
kenzard

Everton é o seguinte.
Import desta maneira as bibliotecas
import java.sql.*;

Na hora de declarar a variavel resultset não coloque ela como null, declare desta maneira

Statement statement;
ResultSet resultSet;

Depois faz desta maneira:

try{   
            Class.forName("com.mysql.jdbc.Driver");   
            Connection conn = DriverManager.getConnection(url, usuario, senha);   
            statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);   
                   
            while(rs.next()){   
                 rs =  statement.executeQuery("SELECT nome FROM cliente");   
                                    String nome = rs.getString("nome");   
                    System.out.println(nome);   
                                   
             }                                                                   
         
        }catch (ClassNotFoundException e) {     
            e.printStackTrace();     
           
    }catch (SQLException e) {     
        e.printStackTrace();   
  
    }
evertonsilvagomesjav

Esta dando erro dentro do while na variavel rs pedindo pra inicializar ela, mas se eu inicializo ela como null da nullpointerexception.

public void exibirCliente(){
		String usuario = "root";   
        String senha = "palitodedente";   
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";   
        ResultSet rs;
        String nome = null;
        String driverName = "com.mysql.jdbc.Driver";
        int i =0;
        try{
        	Class.forName(driverName);
        	Connection conn = DriverManager.getConnection(url, usuario, senha);
        	Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        	        	  
	        while(rs.next()){ //  erro aqui pedindo pra inicializar a variavel.
	         
	        	String sql = "SELECT nome FROM cliente;"; 
	        		rs = statement.executeQuery(sql);
	            		 nome = rs.getString("nome");
	            			
	                 		                			
	         }
	            statement.close();   
	            conn.close();   
       
        }catch (ClassNotFoundException e) {   
            e.printStackTrace();   
		
	}catch (SQLException e) {   
        e.printStackTrace();

	}
	}

KENZAR ou alguem que conheça tem como por favor me explicar o que essa linha de comando faz?

ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY
evertonsilvagomesjav

alguem??

M

Ola amigo…
Você pode tentar assim:

public void exibirCliente(){   
        String usuario = "root";     
        String senha = "palitodedente";     
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";     
        ResultSet rs = null;   
        String nome = null;   
        String driverName = "com.mysql.jdbc.Driver";   
        int i =0;   
        try{   
            Class.forName(driverName);   
            Connection conn = DriverManager.getConnection(url, usuario, senha);   
            Statement statement = conn.createStatement();   
            rs = statement.executeQuery("SELECT nome FROM cliente");
            String dados = "";     
            while(rs.next()){
                        dados = dados + rs.getString("nome") + "\n";                       
                                                           
             } 
                javax.swing.JOptionPane.showMessageDialog(null, dados, "DADOS",javax.swing.JOptionPane.PLAIN_MESSAGE); //exibe a sua pesquisa em um JOptionPane
                statement.close();     
                conn.close();     
         
        }catch (ClassNotFoundException e) {     
            e.printStackTrace();     
           
    }catch (SQLException e) {     
        e.printStackTrace();   
  
    }

Té mais :smiley:

M

Não me lembro se foi assim que eu fiz o codigo na primeira vez que tentei…
Mas se der erro posta ai… :lol:

evertonsilvagomesjav

maaac brigadao cara pela ajuda ta lendo, mas deixa eu perguntar uma coisa, o codigo desta maneira ele exibi pra mim a cada iteraçao um nome certo?

public void exibirCliente(){
		String usuario = "root";   
        String senha = "palitodedente";   
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";   
        ResultSet rs = null;
        String nome = "";
        String driverName = "com.mysql.jdbc.Driver";
        int i =0;
        try{
        	Class.forName(driverName);
        		Connection conn = DriverManager.getConnection(url, usuario, senha);
        			Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        	
        				String sql = "SELECT nome FROM cliente;"; 
        						rs = statement.executeQuery(sql);
	       
        	 while(rs.next()){   		
	          nome =  rs.getString("nome");
	          	JOptionPane.showMessageDialog(null,nome); //AQUI ESTA LENDO CADA HORA UM NOME CORRETO?
	         }
        	   
	            statement.close();   
	            	conn.close();   
       
        }catch (ClassNotFoundException e) {   
            e.printStackTrace();   
		
	}catch (SQLException e) {   
        e.printStackTrace();

	}
	}

DESTA FORMA EXIBINDO FORA DO WHILE ELE ME TRAZ SOMENTE O ULTIMO NOME DO BANCO CERTO?

public void exibirCliente(){
		String usuario = "root";   
        String senha = "palitodedente";   
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";   
        ResultSet rs = null;
        String nome = "";
        String driverName = "com.mysql.jdbc.Driver";
        int i =0;
        try{
        	Class.forName(driverName);
        		Connection conn = DriverManager.getConnection(url, usuario, senha);
        			Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        	
        				String sql = "SELECT nome FROM cliente;"; 
        						rs = statement.executeQuery(sql);
	       
        	 while(rs.next()){   		
	          nome =  rs.getString("nome");
	          	
	         }
        	       JOptionPane.showMessageDialog(null,nome); // DESTA FORMA ELE IRA ME EXIBIR SOMENTE O ULTIMO CADASTRO CERTO?
	            statement.close();   
	            	conn.close();   
       
        }catch (ClassNotFoundException e) {   
            e.printStackTrace();   
		
	}catch (SQLException e) {   
        e.printStackTrace();

	}
	}

so tira essa minha duvida por favor.

M

É isso ai cara… :smiley:

E se você quiser que ele exiba todos os dados de uma vez já no primeiro JOptionPane basta fazer assim:

public void exibirCliente(){   
        String usuario = "root";     
        String senha = "palitodedente";     
        String url = "jdbc:mysql://localhost:3306/javaprogrammer";     
        ResultSet rs = null;   
        String nome = "";   
        String driverName = "com.mysql.jdbc.Driver";   
        int i =0;   
        try{   
            Class.forName(driverName);   
                Connection conn = DriverManager.getConnection(url, usuario, senha);   
                    Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);   
               
                        String sql = "SELECT nome FROM cliente;";   
                                rs = statement.executeQuery(sql);   
             
             while(rs.next()){             
              nome = nome  + rs.getString("nome")+"\n"; //AQUI ELE SALVA UM DADO NA STRING... E SE EXISTIR MAIS UM DADO NO BD... ELE PULA UMA LINHA E SALVA NA LINHA DE BAIXO...
             }
             JOptionPane.showMessageDialog(null,nome); //AI QUANDO VC EXIBIR O JOptionPane... ELE NÃO EXIBE MAIS SOMENTE O ULTIMO VALOR... E SIM TODOS OS DADOS DO BD DE UMA VEZ :D
                 
                statement.close();     
                    conn.close();     
         
        }catch (ClassNotFoundException e) {     
            e.printStackTrace();     
           
    }catch (SQLException e) {     
        e.printStackTrace();   
  
    }   
    }

O problema de fazer assim é que se você possuir um BD muito grande… provavelmente o seu JOptionPane não vai caber na tela :frowning:
Ai vc teria que usar uma JTable…

Té mais cara!!! Boa sorte com os estudos :smiley:

evertonsilvagomesjav

Pô mac muitooooo obrigado mesmo cara pela ajuda!!!

M

Por nada evertonsilvagomesjava… No que nós pudermos ajudar… estamos ai… :smiley:
Té mais…

evertonsilvagomesjav

te mais vlwww!!!

Criado 1 de outubro de 2009
Ultima resposta 2 de out. de 2009
Respostas 19
Participantes 5