Problemas ao pegar arquivos do banco de dados e colocar em um arquivo txt [Resolvido]

4 respostas
btolinux

Olá para todos, estou desenvolvendo um aplicativo no NetBeans que gera um arquivo texto para imprimir em uma impressora térmica.
O arquivo é gerado e a impressora imprime porém eu preciso de inserir informações vinda de um banco de dados, fiz a conexão e testei gerar uma lista com println, tudo correu perfeitamente, inclusive peguei diversos tutoriais aqui no GUJ.

Porém ao tentar inserir as informações do banco no arquivo texto o programa simplesmente não consegue fazer o loop para gerar o arquivo, se eu tiro os comandos para inserir o arquivo funciona, se eu coloco ele nem lista o primeiro arquivo.

vou encaminhando os códigos aqui, se alguém se habilitar desde já eu agradeço

GeraCodigoBarra.java
package atuasi;

//pacotes a serem importados
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;


/**
 *
 * @author btolinux
 */
public class GeraCodigoBarra {

    File arquivoBase, arquivoGerado;
    FileReader abrirBase;
    FileWriter abrirGera;
    PrintWriter escreverArq;
    BufferedReader br;
    StringBuffer bufSaida = new StringBuffer();
    String linha;

    public GeraCodigoBarra() throws IOException, ClassNotFoundException {

            //Pegando a primeira parte do arquivo no modelo argox
            arquivoBase = new File("argox.txt");
            abrirBase = new FileReader(arquivoBase);

            //Criando o arquivo que vai ser utilizado
            arquivoGerado = new File("argox1.txt");
            abrirGera = new FileWriter(arquivoGerado, true);

            //Liberando para escrever no arquivo
            escreverArq = new PrintWriter(abrirGera);

            //Gerando arquivo de buffer para ler
            br = new BufferedReader(new FileReader(arquivoBase));


            //++++++++++++++++++++++++++++
            //esta lista não tá dando o loop, quando eu coloco os campos no System.out.printf funciona...
            //quando eu volto para imprimir no arquivo dá erro
            //++++++++++++++++++++++++++++
            //Listar o nome dos participantes e seus códigos e inserir no arquivo
            try{

                //Objeto para conectar a base de dados
                ConectarDB conecte = new ConectarDB();
                //Recebendo a lista de dados
                ResultSet lista = conecte.QueryResult("SELECT PK_Cadastro, DS_Participante FROM cadastros");

                String codigo, participante;


                //O arquivo gerado será carregado com informações do arquivo base.
                while((linha = br.readLine()) != null ){
                    bufSaida.append(linha + "\n");
                }

                //fechando o arquivo de linha para inserir o texto
                br.close();

                //Lendo a lista de arquivos
                while(lista.next()){

                    //carregando os valores do banco para imprimir a lista
                    codigo = lista.getString("PK_Cadastro");
                    participante = lista.getString("DS_Participante");

                    //Se eu tiro o resto de deixo isso funciona...
                    //System.out.println("--> "+codigo+" - "+participante);

                    //inserindo o arquivo de buffer com os dados do arquivo base
                    escreverArq.print(bufSaida.toString());

                    //agora inserindo os novos dados.
                    escreverArq.println("1F6006000200260"+String.format("%012d", codigo));
                    escreverArq.println("122203500000010Ã"+participante);
                    escreverArq.println("Q0001");
                    escreverArq.println("E");

                }
                //sair do sistema
                conecte.DesConnection();

            } catch (Exception e) {}

            //fechando os arquivos
            escreverArq.close();
            abrirGera.close();
            abrirBase.close();

    }
}
ConectarDB.java
package atuasi;

import java.sql.*;
import javax.swing.JOptionPane;

/**
 *
 * @author btolinux
 */
public class ConectarDB {

    //variáveis para conectar com o banco
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/promessa33_2";
    private static String user = "root";
    private static String password = "0acessoroot4321";
    //private static String caractere = "useUnicode=true ";
    public static Connection con = null;


    public static Connection getConnection() throws SQLException {

        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, user, password);            
            return con;

        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "Não foi possivel conectar ao banco de dados. \nErro no Driver.");
            throw new SQLException(e.getMessage());
        }
    }

    public static void DesConnection() throws SQLException {
        //Desconectar o banco
        con.close();
        JOptionPane.showMessageDialog(null, "Banco desconectado.");
    }

    public ResultSet QueryResult(String Query){

        Statement stm = null;

        try{
            getConnection();
            stm = con.createStatement();
            return stm.executeQuery(Query);

        } catch (SQLException ex) {
            return null;
        }
        
    }


}

Bem acho que é isso. No main eu chamo esse arquivo através de um JFrame, mas estava fazendo ele direto também e dava o mesmo erro.
Obrigado à todos pela atenção e fico no aguardo

4 Respostas

Eric_Yuzo

Deve haver uma exceção para o loop não funcionar. Mas não está aparecendo, por causa do catch que está mascarando a exceção.

catch(Exception e) {}Faça com que a exceção seja exibida:

catch(Exception e) { e.printStackTrace(); }Se houver mesmo uma exceção, poste o erro que ficará mais fácil de conseguir uma ajuda.

Falou…

btolinux

Olá Eric, realmente eu não coloquei nada para ver a exceção…
falha de quem tá aprendendo… coloquei agora e veio um livro de erros dá uma olhada aí:

Obrigado pela atenção.
Vamos continuar tentando. Abraço!

Eric_Yuzo

O problema está no método String.format. O pattern “%012d” exige um parâmetro numérico decimal, e está sendo passado uma String (codigo).

Como são 12 dígitos um int vai ser pequeno. Então converta para long:

escreverArq.println("1F6006000200260"+String.format("%012d", Long.valueOf(codigo)));Assim não deve apresentar problemas.

Falou…

btolinux

Valeu Eric tava googlando o erro e tava percebendo que tinha a ver com essa passagem de valor agora tá certinho…
muito obrigado e boa noite camarada…

Criado 3 de outubro de 2010
Ultima resposta 3 de out. de 2010
Respostas 4
Participantes 2