RESOLVIDO - Armazenar linhas arquivo txt em campo de tabela no BD

Olá. Tenho um formulário com cadastro de algumas informações, todas do tipo string, e tenho uma tabela no BD para armazená-las. Além dessas informações do formulário, preciso gravar no banco cada linha de um arquivo txt e armazenar em uma determinada coluna já criada. As informações desse arquivo são dessa forma: A5 B4 D6 CB. Consigo abrir esse arquivo e mostrar em um textarea, linha a linha, com BufferedReader mas minha dúvida é como fazer para pegar cada linha desse arquivo e inserir no campo criado na tabela. As informações na tabela teriam que ficar conforme abaixo, alterando somente o campo da informação da linha do arquivo txt, enquanto tiver linha, que nesse caso é o hexad.

sala 	    pac caminho	 responsavel      hexad
Sala 1   Maria	  G:/Texto.txt  João A5 B4 D6 CB
Sala 1   Maria	  G:/Texto.txt  João B5 C4 A3 D1
Sala 1   Maria	  G:/Texto.txt  João A4 E4 F6 CF
Sala 1   Maria	  G:/Texto.txt  João A1 D2 C6 CA

Procurei em vários locais como poderia fazer isso, mas não encontrei algo nesse sentido que pudesse me ajudar. Agradeço quem puder colaborar auxiliando-me nesta dúvida. Obrigada.

qual é a sua duvida?

é ler o arquivo, e conectar no banco, é inserir… ?

Olá. Minha dúvida é como inserir (cada linha desse arquivo no campo criado na tabela)…são várias linhas no arquivo txt, e não sei como manipulá-las para a inserção. Está lendo normal, tenho a classe de conexão funcionando corretamente…

se o arquivo tiver uma linha vc sabe imprimir?

se sim. basta ler linha a linha

veja a parte “Line-Oriented I/O”

http://docs.oracle.com/javase/tutorial/essential/io/charstreams.html

Tenho esta app que montei que faz leitura, inclusão, alteração e exclusão de dados em um TXT, isso talvez te ajude a entender como funciona a leitura de um arquivo de texto.

BlocoNotas.rar (45.1 KB)

Dê importância para o método split(" "), ele é responsável por separar objetos da mesma linha.

Sim, quando tem uma linha imprime normal, só que não salva no banco…eu tô achando que o parâmetro que estou passando no insert não está correto…

  • desculpem a formatação pela metade do código…
File file = new File("G:/TAGS.txt");
try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            //String s = br.readLine();
            String linha1;
            StringBuffer sb = new StringBuffer();
            while((linha1 = br.readLine()) != null) {
                //JOptionPane.showMessageDialog(paciente1,s);
                System.out.println(linha1);`

                //StringTokenizer st = new StringTokenizer(linha1, "  ");
                //Registra JDBC driver
                Class.forName("com.mysql.jdbc.Driver");
                //Abrindo a conexão
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/tcc", "root", "usbw");
                //Executa a query de inserção
                java.sql.Statement sta = conn.createStatement();
                sta.executeUpdate("insert into leitura_saida (hexad) values " +linha1);
                JOptionPane.showMessageDialog(rootPane, " Leitura inserida com sucesso! ");
                sb.append(linha1).append("\n");
                linha1 = br.readLine();
                
            }
            br.close();

Falta isso aqui:

sta.executeUpdate("insert into leitura_saida (hexad) values (" +linha1+")");

Funcionou certinho!!! Está inserindo cada linha do arquivo na coluna no BD…eu fiz essa inserção dentro de um while, e preciso também além de salvar essas linhas do arquivo, pegar também as informações que tenho no meu form, que no caso, seria sempre as mesmas informações, o que mudaria seria a coluna hexad, que são as linhas do arquivo…alguma luz de como posso fazer isso?

Você precisa resgatar as informações salvas no banco é isso? Não entendi muito bem sua duvida. Ou vc precisa salvar em outras colunas do banco.

Se for o caso da coluna, por que vc não salva tudo de uma vez? tipo:

sta.executeUpdate(“insert into leitura_saida (hexad, coluna2, coluna3) values (” +linha1+"," +valor2 +","+valor3+")");

Isso, preciso salvar as outras informações do form em outras colunas…eu fiz isso que você disse, mas daí me retorna o seguinte erro:

Column count doesn’t match value count at row 1 netbeans

Já verifiquei a quantidade de colunas do banco com a quantidade de inserções que tenho, e está certinho…;(

Quantas colunas vc tem no BD? me mande seu código de inserção e a lista de colunas q vc possui jovem Padawan.

pq vc conecta no banco de dados a cada linha? fetiche?

1 curtida

Isso se chama gambiarra desnecessária de “jovens Padawan”…

mande código ae que resolvo

Está em anexo…código de inserção e tabela do BD.
inserção.txt (2.2 KB)

Ja sei o erro, seguinte, cada item do tipo string que vc armazena no bando deve estar dentro de um '
Logo vc devera fazer o seguinte:

                    +", ' "+nro_sala.getText()+ " ' "+
                    +" ,' "+nome_sala.getText()+ " ' "+
                    +", ' "+paciente.getText()+ " ' "+

Isso vale apenas para String, e cara, se vc quizer fazer da forma certa usando statement faça os seguinte, substitua tudo este values por ?, assim:

insert into leitura_saida (nro_sala,nome_sala,paciente,caminho,nome_resposavel,observacao,hexad,dia,hora) values (?,?,?,?,?,?,?,?,?)

Então… Pegue a variavel do tipo PreparedStatement e use o metodo:

sta.setString(1,valor); // valor é o que vc quer colocar no primeiro ?

Posso estar errado a forma que escrevi o metodo, estou sem PC com para programar e tenho preguiça de pesquisar, mas é setStringAlgumaCoisa.
O mesmo valor para setInt, setBoolean, setDate ou etc.

Funcionou aqui…muito obrigada pela ajuda @4mega,
Muito grata :slight_smile:
Ah, e vou seguir seus conselhos …