Listar e organizar informações vindo do banco de dados

7 respostas
Willdoidao

To com um problema chato que estou com dificuldades de resolver aqui na empresa preciso listar algus dados vindo do banco de dados do log dos usuarios, só que me pediram para fazer uma tela que puxe isso, até ai tudo bem, só que não estou conseguindo listar os dados do banco vem a ultima informação da tabela e para ai, como faço para listar todos e dividir as informações, um exemplo:

USUARIO: Raimundo;
DATA: 25/06/2010

Sendo que o USUARIO e DATA fosse fixo no texto e o nome e data viesse do banco já!

Tentei fazer esse codigo abaixo para outra aplicação e vou reutilizar ele para fazer a listagem mas como falei a cima só esta listando o conteudo da ultima tabela não as demais!

Connection conn = new conecao().conectar();
        ResultSet rs = null;
        try {
            // Cria e executa uma instrução SQL
            MeuState = conn.createStatement();
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "erro de STATEMENT");

        }

        try {
            rs = MeuState.executeQuery("select * from arma;");


        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Problema de conexao: " + ex.getMessage());
        }
        try {

            while (rs.next()) {

                FabricanteR = rs.getString("Fabricante");
                TipoR = rs.getString("Tipo");
                ModeloR = rs.getString("Modelo");
                CorR = rs.getString("Cor");
                TamanhoR = rs.getString("Tamanho");
                QuantiR = rs.getInt("Quanti");

                try {
                    //Gravar Arquivo
                    File arquivo;
                    arquivo = new File("Relatorio Armações.txt");
                    FileOutputStream fos = new FileOutputStream(arquivo);


                    fos.write(FabricanteR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(TipoR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(ModeloR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(CorR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(TamanhoR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(Linha.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.close();


                } catch (Exception ee) {
                    ee.printStackTrace();
                }
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Problema de conexão: " + ex.getMessage());
        }

7 Respostas

nel
Willdoidao:
To com um problema chato que estou com dificuldades de resolver aqui na empresa preciso listar algus dados vindo do banco de dados do log dos usuarios, só que me pediram para fazer uma tela que puxe isso, até ai tudo bem, só que não estou conseguindo listar os dados do banco vem a ultima informação da tabela e para ai, como faço para listar todos e dividir as informações, um exemplo:

USUARIO: Raimundo;
DATA: 25/06/2010

Sendo que o USUARIO e DATA fosse fixo no texto e o nome e data viesse do banco já!

Tentei fazer esse codigo abaixo para outra aplicação e vou reutilizar ele para fazer a listagem mas como falei a cima só esta listando o conteudo da ultima tabela não as demais!

Connection conn = new conecao().conectar();
        ResultSet rs = null;
        try {
            // Cria e executa uma instrução SQL
            MeuState = conn.createStatement();
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "erro de STATEMENT");

        }

        try {
            rs = MeuState.executeQuery("select * from arma;");


        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Problema de conexao: " + ex.getMessage());
        }
        try {

            while (rs.next()) {

                FabricanteR = rs.getString("Fabricante");
                TipoR = rs.getString("Tipo");
                ModeloR = rs.getString("Modelo");
                CorR = rs.getString("Cor");
                TamanhoR = rs.getString("Tamanho");
                QuantiR = rs.getInt("Quanti");

                try {
                    //Gravar Arquivo
                    File arquivo;
                    arquivo = new File("Relatorio Armações.txt");
                    FileOutputStream fos = new FileOutputStream(arquivo);


                    fos.write(FabricanteR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(TipoR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(ModeloR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(CorR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(TamanhoR.getBytes());
                    fos.write(13);
                    fos.write(10);
                    fos.write(Linha.getBytes());
                    fos.write(13);
                    
                    fos.close();


                } catch (Exception ee) {
                    ee.printStackTrace();
                }
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Problema de conexão: " + ex.getMessage());
        }

Boa tarde.

Como estão corridas as coisas aqui na empresa não tenho tempo de analisar "a fundo" o seu código. Mas pelo o que relatou, parece que o problema está na sua Query e não no seu código. No caso, pelo o que entendi, você precisa buscar informações não somente de uma tabela, estou certo? Se sim, refaça a sua Query.
Sobre os campos fixos, basta deixar a String fixa e concatenar com o valor, assim:

fos.write("Usuario: "+user);

Abraços

M

Duas coisas:

  1. Você deveria separar as responsabilidades no código: ter uma classe DAO (em caso de dúvidas, pesquise sobre este padrão) e delegar a ela todo o trabalho de persistência. Por exemplo, você chamaria o método getLista da classe DAO e ele retornaria um ArrayList contendo todos as armas cadastradas no banco (para isso serve um objeto Arma - OO).

  2. Use uma API de mais alto nível para escrever no seu arquivo. Com PrintWriter fica muito mais simples e claro para quem lê o que você está tentando fazer.

Willdoidao

Nel o fos.write fica marcado como errado quando tento concatenar os textos, e marcobiscaro2112 tem alguma exemplo não da classe mas da api que vc citou, e respondendo os dados vem de uma tabela só e o relatorio é simples somente para um diretor consultar quando der na telha dele,.

M

Para usar PrintWriter:

PrintWriter saida = new PrintWriter("caminho/nome.txt");
saida.println(FabricanteR);  
saida.println(TipoR);  
saida.println(ModeloR);  
saida.println(CorR);  
saida.println(TamanhoR);  
saida.println(Linha);  
saida.flush();
saida.close(); // o mais correto é colocar isso dentro de um bloco finally

Quanto à separação de responsabilidades, é importante por menor que seja a aplicação. Isso facilita a leitura de código, tornando-o mais organizado e fácil de manter.

M

Outra coisa: procure seguir a convenção da linguagem Java para que seu código fique padronizado (entenda-se: nomes de variáveis começam com letra minúsculas; e porque há um “R” no final do nome?).

Willdoidao

O R é um codigo aqui do serviço! (Não sei pq, mas usam isso aqui!)
Então consegui fazer a concatenção dos dados como falei lá em cima USUARIO e DATA, agora preciso de uma ajuda para listar todo o conteudo do meu banco, pq até agora está listando apenas o ultimo conteudo como faço isso o codigo atual está assim:

Connection conn = new conecao().conectar();
        ResultSet rs = null;
        try {
            // Cria e executa uma instrução SQL
            MeuState = conn.createStatement();
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "erro de STATEMENT");

        }

        try {
            rs = MeuState.executeQuery("select * from arma;");


        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Problema de conexao: " + ex.getMessage());
        }
        try {

            while (rs.next()) {

                FabricanteR = rs.getString("Fabricante");
                TipoR = rs.getString("Tipo");
                ModeloR = rs.getString("Modelo");
                CorR = rs.getString("Cor");
                TamanhoR = rs.getString("Tamanho");
                QuantiR = rs.getInt("Quanti");

                try {
                    //Gravar Arquivo
                    File arquivo;
                    arquivo = new File("C:/Documents and Settings/Ótica/Meus documentos/Relatorio Armações.rtf");
                    PrintWriter fos = new PrintWriter(arquivo);

                    fos.println("Fabricante: " + FabricanteR);
                    fos.println("Tipo:" +TipoR);
                    fos.println("Modelo: "+ModeloR);
                    fos.println("Cor: " + CorR);
                    fos.println("Tamanho: " + TamanhoR);
                    fos.println(Linha);
                  
                    fos.close();


                } catch (Exception ee) {
                    ee.printStackTrace();
                }
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Problema de conexão: " + ex.getMessage());
        }
M

O único problema agora é que você não pode fechar (close()) o PrintWriter para cada registro. Você deve escrever cada um dos registros, pular uma linha (usando um println sem argumentos) e só fechar após o laço. Captou?

Criado 5 de fevereiro de 2010
Ultima resposta 5 de fev. de 2010
Respostas 7
Participantes 3