Jtable apenas mostrado o primeiro ID

20 respostas
5
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.sql.*;

public class Cadastro extends javax.swing.JFrame {

    /** Creates new form Cadastro */
    public Cadastro() {
        super("JTable");

    final DefaultTableModel modelo = new DefaultTableModel();

    // constrói a tabela
    JTable tabela = new JTable(modelo);

    // Cria duas colunas
    modelo.addColumn("ID");
    modelo.addColumn("Nome");
    modelo.addColumn("Cliente");
    modelo.addColumn("Referência");

    // exibe os dados da tabela MySQL
    try{
       Class.forName("com.mysql.jdbc.Driver");
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root","1234");

      // procedimentos para obter os dados de uma tabela
      Statement stmt = conn.createStatement();
      String query = "SELECT * FROM logistica_produtos";
      ResultSet rs = stmt.executeQuery(query);

      while(rs.next()){
        int id = rs.getInt("IdProdutos");
        String nome = rs.getString("Nome");
        String cliente = rs.getString("Cliente");
        int referencia = rs.getInt("Referencia");
       modelo.addRow(new Object[]{new Integer(id), nome, cliente, new Integer(referencia)});
      }
       //fim procedimento para obter os dados
      }
      catch(SQLException ex){
           System.out.println("SQLException: " + ex.getMessage());
           System.out.println("SQLState: " + ex.getSQLState());
           System.out.println("VendorError: " + ex.getErrorCode());
      }
      catch(Exception e){
        System.out.println("Problemas ao tentar conectar com o banco de dados");
    }
tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));

    Container c = getContentPane();
    c.setLayout(new FlowLayout());

    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);

    setSize(400, 300);
    setVisible(true);
}
 public static void main(String args[]) {
     Cadastro app = new Cadastro();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

O código acima descrito serve para eu mostrar a informaçao de uma tabela da base de dados...
só que o problema é que eu só estou conseguindo mostar apenas uma informação, isto é, com este código acima descrito apenas consigo mostrar o primeiro ID. A ajuda que eu pretendia era conseguir listar toda a infomaçao que eu tenho dentro dessa tabela, será que me conseguem ajudar? devo estar a errar em alguma parte, só nao sei qual?

20 Respostas

Thiago_Luis

Fala cara, blza?
Veío, tenta isso:

ResultSet rs = stmt.executeQuery(query); rs.first(); while(rs.next()){
Quando eu utilizo JDBC, sempre que eu resgado um ResultSet, eu tenho que deixar o ponteiro na primeira posição.
Para daí ele pegar todos os resultados do ResultSet desde o primeiro registro.

Já vi muita gente aqui não utilizando e me dizendo que funciona. Comigo é bem o contrário :shock:

Abraço.

5

obrigadao cara, ja consegui...

Agora tava aqui tenfo outro problema com o um login em que o código é o seguinte:
import java.sql.*;
import javax.swing.*;
public class Login2 extends javax.swing.JFrame {

    /** Creates new form Login2 */
    public Login2() {
        if(jTextField1.getText().equals("")
          || jPasswordField1.getText().equals("")){
           JOptionPane.showMessageDialog(null, "Login e Senha Inválido.","oi", JOptionPane.ERROR_MESSAGE);
        }else{
            Connection con = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xp", "root","1234");
                Statement stm = con.createStatement();
                String SQL = "Select * from usuarios where login = '" + jTextField1.getText()+"';";
                ResultSet rs = stm.executeQuery(SQL);

                while(rs.next()){
                    String loginn = rs.getString("login");
                    String senhaa = rs.getString("senha");
                    String nomee = rs.getString("nome");
                    String matriculaa = rs.getString("matricula"); //ctx
                    String emaill = rs.getString("email");
                    String perfill = rs.getString("perfil");

                    if (jTextField1.getText().equals(loginn)&& jPasswordField1.getText().equals(senhaa)){
                        JOptionPane.showMessageDialog(null,"Seja bem vindo: " + nomee, "Oi.simples assim!", JOptionPane.INFORMATION_MESSAGE);
                        jLabel3.setText(nomee);
                        jLabel4.setText(matriculaa);
                        jLabel6.setText(emaill);
                        jLabel5.setText(perfill); // adiministradorou usuário
                    }else{
                        JOptionPane.showMessageDialog(null,"Login ou senha inválidos.", "oi. simples assim", JOptionPane.ERROR_MESSAGE);
                        jPasswordField1.setText("");
                    }
                }
            }catch (SQLException e){
                e.printStackTrace();// vejamo que erro foi gerado e quem gerou
                JOptionPane.showMessageDialog(null, "erro na conexão, com o banco de dados!","dv", JOptionPane.WARNING_MESSAGE);
            }catch (ClassNotFoundException e){
            e.printStackTrace();
            }finally {
                try{
                    con.close();
                }catch(SQLException onConClose){
                    //System.out.println("Houve erro no fechamento da conexao");
                    JOptionPane.showMessageDialog(null, "Erro na conexao, com o banco de dados!", "oi", JOptionPane.WARNING_MESSAGE);
                    onConClose.printStackTrace();
                }
            }//fim do bloco try-catch-finally
         }// else do logine senha vazios
    jTextField1.setText("");
    jPasswordField1.setText("");
   //     initComponents();

        initComponents();
    }
o código nao tem erro nenhum, penso eu, mas quando eu faço run file nao aparece nada, isto é, nao aparece a jframe, para eu testar o meu login sabe dizer me pk? [list]run: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Login2.(Login2.java:22) at Login2$2.run(Login2.java:202) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) BUILD SUCCESSFUL (total time: 3 seconds) [/list] esta é a listagem que apacece quando eu compilo
Thiago_Luis

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at Login2.(Login2.java:22)

Aqui diz que tem alguma instância que vc está tentando acessar que está nula.
Posta a linha 22 do seu código, ou bate certinho com a que está aqui no GUJ?

String nomee = rs.getString("nome");

Se for, talvez não esteja conseguindo pegar o nome do banco e setar na variável.

Abraço.

5

a linha 22 é a seguinte

if(jTextField1.getText().equals("")
5

efectivamente o jTextField1.getText está a null…

Quais sao as alternativas que eu tenho para deixar de tar o jTextField1.getText a null, terá a ver com a base dados?

Thiago_Luis

Acredito que não.

Pq nessa instrução ele nem está mexendo com a base, ele só está pegando o texto do campo JTextField.
Na classe onde o JTextField é criado, vc deu um new nele??
Fora isso estou sem saber o que é.

Abraço

5

qual seria a sua ideia pra dar o new onde é que eu inseria o new?

Thiago_Luis

Digo, na classe onde está o JTextField.

JTextField jTextField1 = null; //Ai no construtor da classe, tavles tenha esquecido de dar o new no JTextField jTextField1 = new JTextField();
Mas com certeza vc deve ter feito isso.
Só mencionei pois na facul o povo esquece de instanciar, daí vem o erro NullPointerException.
Fora isso, realmente não sei como ajudar…

5

Por acaso não tens ai nenhum código que me possas disponibilizar de um login que voce tenha feito, para eu dar uma vista de olhos

Thiago_Luis

Pior que não,

O que eu tenho está em JSP, mas segue o mesmo critério que o seu.
A lógica está certa, mas tem algo passando dispercebido.
Se vc puder passar o código completo. Se for grande passe por MP.
Mas nesta parte que está acontecendo o erro é simplesmente pegar os dados do JTextField e verificar se estão em brando???
Se o JTextField está instanciado, não consigo entender pq diz NullPointerExcpetion.

Bom, se vc puder passar, talvez eu consiga ajudar.

Abraço

5
import java.sql.*;
import javax.swing.*;
public class Login2 extends javax.swing.JFrame {

    /** Creates new form Login2 */
    public Login2() {
 //       JTextField jTextField1 = null;
//Ai no construtor da classe, tavles tenha esquecido de dar o new no JTextField
jTextField1 = new JTextField();

        if(jTextField1.getText().equals("")|| jPasswordField1.getText().equals("")){
           JOptionPane.showMessageDialog(null, "Login e Senha Inválido.","oi", JOptionPane.ERROR_MESSAGE);
        }else{
            Connection con = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xp", "root","1234");
                Statement stm = con.createStatement();
                String SQL = "Select * from usuarios where Login = '" + jTextField1.getText()+"';";
                ResultSet rs = stm.executeQuery(SQL);

                while(rs.next()){
                    String loginn = rs.getString("login");
                    String senhaa = rs.getString("senha");
                    String nomee = rs.getString("nome");
                    String matriculaa = rs.getString("matricula"); //ctx
                    String emaill = rs.getString("email");
                    String perfill = rs.getString("perfil");

                    if (jTextField1.getText().equals(loginn)&& jPasswordField1.getText().equals(senhaa)){
                        JOptionPane.showMessageDialog(null,"Seja bem vindo: " + nomee, "Oi!", JOptionPane.INFORMATION_MESSAGE);
                        jLabel3.setText(nomee);
                        jLabel4.setText(matriculaa);
                        jLabel6.setText(emaill);
                        jLabel5.setText(perfill); // adiministradorou usuário
                    }else{
                        JOptionPane.showMessageDialog(null,"Login ou senha inválidos.", "oi", JOptionPane.ERROR_MESSAGE);
                        jPasswordField1.setText("");
                    }
                }
            }catch (SQLException e){
                e.printStackTrace();// vejamo que erro foi gerado e quem gerou
                JOptionPane.showMessageDialog(null, "erro na conexão, com o banco de dados!","dv", JOptionPane.WARNING_MESSAGE);
            }catch (ClassNotFoundException e){
            e.printStackTrace();
            }finally {
                try{
                    con.close();
                }catch(SQLException onConClose){
                    //System.out.println("Houve erro no fechamento da conexao");
                    JOptionPane.showMessageDialog(null, "Erro na conexao, com o banco de dados!", "oi", JOptionPane.WARNING_MESSAGE);
                    onConClose.printStackTrace();
                }
            }//fim do bloco try-catch-finally
         }// else do logine senha vazios
   // jTextField1.setText("Amadeu");
   // jPasswordField1.setText("1234");
       // initComponents();

        initComponents();
    }
  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
      ///// que código insiro para que o botao faça a busca na base de dados se encntra o login ou nao??????

    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Login2().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JPasswordField jPasswordField1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField4;
    private javax.swing.JTextField jTextField5;

amigo ja consegui passar mais um passo, agora gostava de saber como é que eu faço para quando eu carrego no botao da entrar ele faça uma busca a base de dados, é como eu ainda sou novo nestas andanças do java, se me podesse ajudar....

abraço

71C4700

Cara vc esta utilizando o Netbenas, não é?

Perceba que na linha 57 do codigo que vc postou aqui no GUJ o seu construtor chama o metodo initComponents(), que instancia todos os componentes, como o amigo,Thiago Luis,tinha falado vc ainda nao instanciou o seu jTextField1. Para solucionar chame o initComponents() na primeira linha do construtor so pra teste.

Att.

71C4700

Vc pode adicionar uma evento ao seu botao, ai quando vc clicar nele ele lanca este evento. Se não me engano seria o actionPerformance();

Ai dentro do metodo vc pode fazer sua consulta.

Att.

5

sim exacto seria esse…

Mas agora eu n sei como faço para fazer essa consulta a base de dados, será kme podia ajudar?

71C4700

Imagine que quando vc clicar neste botão ele vai executar algum metodos. Pronto a ideia é essa.

Neste metodo vc vai fazer sua consulta, da mesma forma que vc estava fazendo dentro do seu contrutor. Certo?

Att.

5
ve lá se eu percebi a sua ideia...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
      boolean consulta = true;
      try{ //tratamento de erros
          Class.forName("com.mysql.jdbc.Driver");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sifa", "root","1234");
                Statement stmt = con.createStatement();
                ResultSet RS = stmt.executeQuery("Select * from usuarios where Login = '" + jTextField1.getText()+"';");
                while (RS.next()){
                    jTextField1.setText(String.valueOf("login"));
                    jPasswordField1.setText(RS.getString("senha"));
                    consulta=false;
                    JOptionPane.showMessageDialog(this,"Dados Encontrados");
                }
                if(consulta) JOptionPane.showMessageDialog(this,"Dados não encontrados");
                RS.close();
                stmt.close();
                con.close();
      }catch (SQLException e){ //trata os erros
          JOptionPane.showMessageDialog(this,"Erro Cmdo SQL"+e.getMessage());
      } catch (ClassNotFoundException e){
          JOptionPane.showMessageDialog(this, "Drver não encontrado");

      }

    }
e agora como é k eu faço para atribuir os perfis dos utilizadores
Thiago_Luis

Olha, eu não sei como que está a sua lógica de negócio, mas eu faria assim:

while (RS.next()){ jTextField1.setText(String.valueOf("login")); jPasswordField1.setText(RS.getString("senha")); consulta=false; JOptionPane.showMessageDialog(this,"Dados Encontrados"); setPerfil(RS); }
Daí, no método setPerfil(ResultSet rs), vc verificaria o perfil do cara a faria a atribuição.
Alguma coisa assim.

Abraço

5

não dá pra explicar melhor…
tipo eu tenho na minha 3 tipos de utilizadores, e agora queria que quando o utilizador A abrisse a a aplicaçao depois de ter feito login abrisse só a parte destinada aquele usuário…
percebe?

5

então cara voce consegue me ajudar? já tou cansado de olhar pra este código deve ser por isso que nem consigo pensar direito…

Thiago_Luis

Opa, estou tentando :smiley:
Então, deixa eu tentar explicar minha idéia:

public void setPerfil(ResultSet rs){ if(rs.getString("perfil").equals("Administrador")){ //seta alguma coisa no programa com o perfil de Administrador } if(rs.getString("perfil".equals("Usuario")){ //seta alguma coisa no programa com o perfil de Usuario } //e por ai vai.
Repito, não sei como está a sua lógica de negócio, então, não sei onde colocar este método e como implementa-lo.
Mas é bem isso que vc disse que queria:
Quando o utilizador A abrir a aplicação, ele faz o login, mostra o JOptionPane informando que os dados foram encontrados e depois vai para o método setPerfil(rs); onde vc seta o que o usuário pode fazer ou não.

É mais ou menos assim.

Abraço

Criado 25 de maio de 2009
Ultima resposta 27 de mai. de 2009
Respostas 20
Participantes 3