Ler arquivo .sql e gravar em um banco de dados Mysql

6 respostas
Z

Boa tarde, tenho o seguinte código para LER um arquivo .sql

JFileChooser abrir = new JFileChooser(); int retorno = abrir.showOpenDialog(null); if (retorno==JFileChooser.APPROVE_OPTION){ caminho = abrir.getSelectedFile().getAbsolutePath(); FSelect.setText(caminho); TextValidados.setText(""); try{ FileReader fileRdr = new FileReader(caminho); BufferedReader buffRdr = new BufferedReader(fileRdr); boolean eof = false ; while(!eof){ String lineRead = buffRdr.readLine(); if( lineRead == null ){ eof = true ; }else{ TextValidados.append(lineRead+"\n"); } } buffRdr.close(); }catch (IOException e){ TextValidados.append("Error - " + e.toString() ); } }

texto do arquivo .sql

INSERT INTO CONTRACHEQUES MAIO VALUES ( 922, 1, 200,00, 1012,39, 'P', 11, '2013-05-01', 'M', 922, 922, 'R', 2, '0411', 1012,39, 1, 1, 'PREFEITURA', 62, 'RONDA', 'ACELINO', 2, 1, NULL, 1501,71, NULL, 1366,73, 1501,71, 0, 0, 1396,42, 0, 1, NULL, 'SALARIO BASE', '2013-05-31 23:59:59.000000', 154, '0400', '04.00', 1, 1546,76, 630,59, '[telefone removido]');

ele lê e joga os dados perfeitamente na JTextArea atraves do append.

mas na hora de gravar em um DB dá uns erros loucos, como barras() antes de aspas simples, barras n (\n) nas quebras de linha, e acaba dando erro de syntax SQL e nao insere nada.

Mensagem de ERRO:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''INSERT INTO CONTRACHEQUES MAIO VALUES (	922,	1,	200.00,	1012.39,	\'P\',	11,	\'2' at line 1

Alguem pode me ajudar aí?

valeu

6 Respostas

A

Problema de sintax no sql. Tenta capturar a excessão vinda do banco para saber qual o problema na persistência dos dados.
Posta o código Java aqui, no momento que vc usa a persistência no banco.

D

Uma parte dos erros é devida a isso

TextValidados.append(lineRead+"\n");

Entendeu?

Z

Botton inserir

DadosSQLConn dadossqlconn = new DadosSQLConn();
                DadosSQL dadossql = new DadosSQL();
                dadossql.DadosSQL(TextValidados.getText());
                dadossqlconn.Insert(dadossql);

Insert

public void Insert(DadosSQL dados){  
        
      try {  
         conect.Connect();   
         String sql = "?";  
         pst = conect.con.prepareStatement(sql); 
         pst.setString(1, dados.getTextoSQL()); 
         
         pst.execute();  
         pst.close();  
         conect.Fecha();
      } catch (SQLException e) {  
          System.out.println(pst);
         System.out.println(e.getMessage());
         JOptionPane.showMessageDialog(null,"ERRO " + e.getMessage());  
      }  
   }

saída do código:

Conexao: com.mysql.jdbc.JDBC4Connection@232a4ae9
com.mysql.jdbc.JDBC4PreparedStatement@3c876ed7: 'INSERT INTO CONTRACHEQUES MAIO VALUES (	922,	1,	200.00,	1012.39,	\'P\',	11,	\'2013-05-01\',	\'M\',	922,	922,	\'R\',	2,	\'0411\',	1012.39,	1,	1,	\'PREFEITURA MUNICIPAL DE SANTIAGO\',	62,	\'RONDA\',	\'ACELINO MARTINS\',	2,	1,	NULL,	1501.71,	NULL,	1366.73,	1501.71,	0,	0,	1396.42,	0,	1,	NULL,	\'SALARIO BASE\',	\'2013-05-31 23:59:59.000000\',	154,	\'0400\',	\'04.00\',	1,	1546.76,	630.59,	\'[telefone removido]\');\n'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''INSERT INTO CONTRACHEQUES MAIO VALUES (	922,	1,	200.00,	1012.39,	\'P\',	11,	\'2' at line 1
CONSTRUÍDO COM SUCESSO (tempo total: 21 segundos)
Z

tentei inserir assim:

try { String [] cmd = {"C:\\xampp\\mysql\\bin\\mysql.exe -u santiago -p pass "+caminho}; Process p = Runtime.getRuntime().exec(cmd); } catch (IOException ex) { Logger.getLogger(ValidarSQL.class.getName()).log(Level.SEVERE, null, ex); }

mas nada feito!

D
zicky23:
public void Insert(DadosSQL dados){  
        
      try {  
         conect.Connect();   
         String sql = "?";  
         pst = conect.con.prepareStatement(sql); 
         pst.setString(1, dados.getTextoSQL()); 
         
         pst.execute();  
         pst.close();  
         conect.Fecha();
      } catch (SQLException e) {  
          System.out.println(pst);
         System.out.println(e.getMessage());
         JOptionPane.showMessageDialog(null,"ERRO " + e.getMessage());  
      }  
   }
A desgraça de tentar fazer algo sem saber o que se está fazendo é essa. Você sabe como funciona o setString, da interface PreparedStatement? A função deste método é justamente impedir que aspas simples sejam lidas 'ipsis literis', evitando, assim, SQL Injection. Quando você passa uma sentença completa de SQL para ela, com aspas simples e tudo, você simplesmente está pedindo para que ela destrua o SQL. Ou você envia o SQL lido in natura para a execução do comando ou nada feito.
Z

hiiii, realmente nao lembrava.

vou tentar direto “in natura” como vc falou…

valeu e foi mal pela ratiada.

Criado 14 de junho de 2013
Ultima resposta 14 de jun. de 2013
Respostas 6
Participantes 3