Import txt para SQLServer 2005?

9 respostas
snowblacksoul

Pessoal estou com um grande problema, importar dados do txt para o sqlserver 2005
sei que existe diversos tópicos sobre importar txt para o banco, mas com esse tópico e o erro que estou não achei
por isso resolvi abrir esse tópico.

Não estou conseguindo importar para o banco
vou colocar minha classe aqui e o erro abaixo

espero que possam em ajudar por favor!!

import java.beans.Statement;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

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

/**
 *
 * @author daniel
 */
public class TestImport {

    public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException {

        File file = new File("C:/AA/TESTE.txt"); // o path do arquivo, ex.: "C:\Importacao.txt"
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

            //sqljdbc/sqljdbc4/jtds-1.2
              Class.forName("net.sourceforge.jtds.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/elianaSQL","sa","greg");
            System.out.println("Conectado");

            Statement stmt = (Statement) connection.createStatement();

       List<Infos> listLivros = new ArrayList<Infos>();
             while (bufferedReader.ready()) {

            String linha = bufferedReader.readLine(); // lê uma linha...
            String[] arrayDados = linha.split(";");  // separa os dados por seu delimitador...

            Infos livro = new Infos();
           livro.setID(arrayDados[0]);
           livro.setNOME(arrayDados[1]);
           livro.setENDERECO(arrayDados[2]);
           livro.setNUMERO(arrayDados[3]);

        listLivros.add(livro);
        }
  System.out.println("------------------------------------");

        for (Infos livro : listLivros) {

            String sentenca = "insert into dbo.teste(ID,NOME,ENDERECO,NUMERO) values (?,?,?,?,?)";
            PreparedStatement statementInsert = connection.prepareStatement(sentenca);

            statementInsert.setString(1, livro.getID());
            statementInsert.setString(2, livro.getNOME());
            statementInsert.setString(3, livro.getENDERECO());
            statementInsert.setString(4, livro.getNUMERO());

            statementInsert.execute();
           // statementInsert.executeUpdate();
            //stmt.executeUpdate(sentenca);
        }
        connection.commit();
        System.out.println(listLivros);

    }
}

Erro:

Conectado
Exception in thread "main" java.lang.ClassCastException: net.sourceforge.jtds.jdbc.JtdsStatement cannot be cast to java.beans.Statement
	at TestImport.main(TestImport.java:37)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Fiz com Oracle e deu certo no sql nao esta importando!

9 Respostas

DZR

Jovem,

Vc está usando o Statement e está importando o PreparedStatement…

Mude seus imports

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;

Para

import java.sql.*;
snowblacksoul

Grande nao deu certo, troquei os imports
e agora está dando esse erro!

DZR

Certo…

A jar do drive do SQL está na sua classpath?
Pq aqui me parece que tem problemas com conexão, onde ele não conseguiu criar direito seu objeto connection.

snowblacksoul

Simm está sim!

Como pode ver na linha acima do pontilhado está “Conectado”;

DZR

Jovem,

Estou comparando o seu código com um de conexão que eu tenho aqui…
Para que vc usa essa parte no código?

Statement stmt = (Statement) connection.createStatement();

Não vi utilização para ela. Tente tirar essa parte.

DZR

OPS! Vi outra coisa aqui agora...

Seu select tem 5 ?, e vc está setando somente 4 ?

Olhe lá:

String sentenca = "insert into dbo.teste(ID,NOME,ENDERECO,NUMERO) values (?,?,?,?,?)";  //Aqui tem 5 ?
            PreparedStatement statementInsert = connection.prepareStatement(sentenca);  
  
            statementInsert.setString(1, livro.getID());  
            statementInsert.setString(2, livro.getNOME());  
            statementInsert.setString(3, livro.getENDERECO());  
            statementInsert.setString(4, livro.getNUMERO());  
            //cadê o 5º parametro? ou  tem 4 parametros?
  
            statementInsert.execute();
snowblacksoul

Valeu DZR eu arrumei isso, só que agora deu estouro de memória, sabe como posso resolver isso?!

DZR

provavelmente o seu bloo de notas deve estar com muitos dados…

Eu sei que tem um lance em que vc esvazia o buffer de leitura do TXT, e não provoca erro de estouro de memória.
Faça o teste aí, com umas 10 linhas no seu TXT. Depois vai aumentando e verificando isso.

Grinvon

Uma outra coisa:

A depender do tamanho do arquivo (ex, mais de 100 mil linhas a serem adicionadas), talvez seja necessário usar batch / bulk insert por questões de performance.

Criado 17 de agosto de 2011
Ultima resposta 18 de ago. de 2011
Respostas 9
Participantes 3