Pegando campos de um TXT para DB MySQL

5 respostas
L

Boa Tarde, sou novo no Fórum e também sou iniciantena linguagem JAVA…

estou com um problemão… a 4 dias estou buscando informações aqui mesmo no fórum e na internet, porém, não cheguei a lugar algum… tenho que transferir dados que estão contido em um arquivo .log (no caso txt) para uma tabela de um banco de dados MySQL, já li bastante e também olhei tanto aqui no no fórum como também na internet num todo.

Ja consigo abrir o arquvo, tentei várias vezes gravar no bancop de dados e sempre as informações gravadas eram NULL… toquei e então consegui algo, porém, ele lê a primeira linha e da erro, alguém pode me dar uma ajuda de como posso terminar esse código?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ler.gravar;

import java.io.*;
import java.sql.*;
import java.util.*;

public class TxtToData {
   private static final String DB = "msgas",
                               TABLE_NAME = "med2",
                               HOST = "jdbc:mysql://localhost/msgas",
                               ACCOUNT = "root", 
                               PASSWORD = "",
                               DRIVER = "com.mysql.jdbc.Driver",
                               FILENAME = "C:/teste.log";

   public static void main (String[] args) {
      try {

         // connect to db
         Properties props = new Properties();
         props.setProperty("user", ACCOUNT);
         props.setProperty("password", PASSWORD);

         Class.forName(DRIVER).newInstance();
         Connection con = DriverManager.getConnection( 
            HOST, props); 
         Statement stmt = con.createStatement(); 

         // open text file
         BufferedReader in = new BufferedReader( 
                                new FileReader(FILENAME));

         // read and parse a line
         String line = in.readLine();
         while(line != null) {
             System.out.println(line);

            StringTokenizer tk = new StringTokenizer(line);
            String primeira = tk.nextToken(),
                   segunda = tk.nextToken();

            // execute SQL insert statement
            String query = "INSERT INTO " + TABLE_NAME;
            query += " VALUES(NULL, ";
            query += quote(primeira) + ", ";
            query += quote(segunda) + ", ";
            
            stmt.executeQuery(query);

            // prepare to process next line
            line = in.readLine();
         }
         in.close();
      }

      catch( Exception e) { 
         e.printStackTrace();
      } 
   }

   // protect data with quotes
   private static String quote(String include) {
      return("\"" + include + "\"");
   }
}
  • O erro que ele da é o seguinte:

init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\lio.easynet\Desktop\importante\teste\JavaApplication12\build\classes
compile-single:
run-single:
Tag M01 - Tramo A
java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.Statement.checkForDml(Statement.java:412)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1115)
at ler.gravar.TxtToData.main(TxtToData.java:53)
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Tentei algumas variações, mas a que mais achei interessante foi essa, pois copiei o código e o alterei para o que precisava, ai no erro peço ao código pra mostrar as linhas que estão sendo executadas, ele mostra a primeira e então da o erro… queria por gentileza que alguém pudesse me ajudar.

No mais, agradeço desde ja.

5 Respostas

J

Acredito que o erro esta em sua query, ele não está aceitando essa query (Pelo menos é o que parece pelo erro)

Qual é a estrutura desse arquivo, são linhas continuas? Separadas por virgula?

Como que é?

L

è um texto contínuo com diversas páginas, e em todas as páginas o texto se repete com a diferença de uma única coluna de informações, porém, não é separado por TAB ou qualquer outro caractere, ele é separado por espaços.

Se eu tenho que identificar a palar e mandar pro BD, porém, são 11 campos que tenho qeu gravar no BD… coloquei com apenas esses campos o código pra ilustrar o problema…

Tag                                                                            M01 - Tramo A
	Archive                                                                        Current

	Closing timestamp                                                              2007-05-02.06:37:58
	Flowing period, fraction e-4                                                   0.0063
	Cumulative meter alarms                                                        0000h
	Cumulative site status                                                         00h
	Event Number of last-written event                                             615
	Flowing period, seconds                                                        142
	Opening timestamp                                                              2007-05-02.00:00:00
	Accumulator, archive period, daily, totalizer (m3)                             187
	Accumulator, archive period, daily, residue (m3)                               0.9978149
	Flow rate, net (m3/h)                                                          0
	Process input, scaled float, temperature (°C)                                  24.20472
	Process input, scaled float, pressure (kPag)                                   1436.165
	Interpolated/static K-factor (pul/m3)                                          10
	Interpolated/static meter factor                                               0.9928989
	AGA 8, Relative density at reference                                           0.6308
	AGA 8, Compressibility at reference                                            0.9976
	AGA 8, Compressibility, flowing                                                0.9657
	AGA 8, Supercompressibility, Fpv                                               1.0164
	Input pulse count, archive reset, daily                                        123

	Alarm Bits
	bit  0  Temperature input out of range                                           -
	bit  1  Pressure input out of range                                              -
	bit  2  Differential pressure input out of range                                 -
	bit  3  Flowing density input out of range                                       -
	bit  4  Water content input out of range                                         -
	bit  5  Differential pressure low                                                -
	bit  6  Orifice pressure exception                                               -
	bit  7  Accumulator overflow                                                     -
	bit  8  Orifice characterization error                                           -
	bit  9  Analysis total zero                                                      -
	bit 10  Analysis total not normalized                                            -
	bit 11  Compressibility calculation error                                        -
	bit 12  Reference density error                                                  -
	bit 13  Temperature correction error                                             -
	bit 14  Vapour pressure error                                                    -
	bit 15  Pressure correction error                                                -

	Status Bits
	bit 11  Meter was enabled                                                        -
	bit 12  Backplane communication fault                                            -
	bit 13  Measurement configuration changed                                        -
	bit 14  Power up                                                                 -
	bit 15  Cold start                                                               -

esse é o texto, tem arquivos log que chegam a ter 1500 páginas.

acho que eu estou mesmo encrencado.

V

tenta substituir o executeQuery só por execute;
pq deu erro na linha 53

V

apenas uma dica se vc tiver implementando para web e o arquivo for muito grande, certamente irá demorar para importar, vc poderá ter problemas de sessao.

L

Sim, ja alterei…
Obrigado!

Criado 2 de abril de 2008
Ultima resposta 7 de abr. de 2008
Respostas 5
Participantes 3