INSERT em SQL SERVER apartir de um .txt

Tenho um arquivo txt que esta nesse formato (só exemplo):

1234567890
2345678901
3456789012
4567890123

Cada linha dessa tem uma quantidade de caracteres certos que formam uma informação (coluna).

Quero dar um insert desse arquivo no SQL SERVER já separando por colunas.

Só como informação adicional, se for preciso, ou mais facil; já consegui colocar delimitadores pra definir o tamanho certo de cada coluna e para definir o fim de linha.

Esse arquivo é atualizado diariamente, ou seja, todo dia tenho 700 novos registros para importar para o BD.

Segue o Código que estou utilizando

package testsql;

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



public class Main {


public void Gravar(String batidas_novas){
       String conteudo = batidas_novas;

       try{
         String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=CLEAN;user=sa;password=1234;";
         Connection con;
         Statement stmt;

         con = DriverManager.getConnection(connectionUrl);

         stmt = con.createStatement();

         //FileWriter x = new FileWriter("C:\Users\reinaldo.sales\Desktop\batidas_novas.txt",true);
         FileReader fr = new FileReader("C:\Users\reinaldo.sales\Desktop\batidas03-02-11.txt"); // Local do Arquivo
         BufferedReader br = new BufferedReader(fr); // Alterando da variável fr para br

         String s = "";
             while (( s = br.readLine() ) != null) {

             if (s.charAt(9) == '3') { // faz a comparação, se o indice 9 for igual a 3 ele faz isso ai em baixo

             conteudo += "\r\n"; // criando nova linha e recuo no arquivo
             stmt.executeUpdate("INSERT INTO BATIDAS(ID, IGNORA1, DATA, HORA, IGNORA2, PIS) VALUES ('s.substring(0,9)', 's.substring(9,10)', 's.substring(10, 18)', 's.substring(18,19)', 's.substring(19, 22)', 's.substring(22,23)', 's.substring(23)')");

                }
            }
        }

       catch(Exception e){
          JOptionPane.showMessageDialog(null,e.getMessage(),"Atenção",JOptionPane.WARNING_MESSAGE);
       }
}

Olá! Em que ponto está tendo dificuldades? Detalhe melhor o que não está conseguindo fazer, por gentileza.

Como ideia, se você já consegue ler o arquivo crie uma List<String> adicione cada linha. Itere a List posteriormente gravando em banco de dados.

Poste mais detalhes aí.

A minha dificiculdade é apenas o insert definindo quais índices vão ser inseridos em cada coluna.

Não sabia que precisava criar uma List e iterar, (Na verdade nem sei como vou fazer isso !

Mas vou pesqusiar agora.

Grato desde já !

Não sei se entendi bem sua dúvida, mas se for quanto a ordem de colocar no insert, segue um exemplo:

Tabela Cliente
Campos Nome, Telefone, CPF

[code]
String cpf, name, tel;
//Recupera os valores do arquivo
String sql = “insert into cliente(cpf, nome, telefone) values (?, ?, ?)”;
PreparedStatement ps = …//Cria o prepared statement

ps.setString(1, cpf);
ps.setString(2, name);
ps.setString(3, tel);[/code]

Acho que entendi o que quer dizer. A dúvida é como pegar os valores e concatenar na string SQL que vai fazer a inserção no banco de dados, certo?
Cada linha será um registro, onde você quebra a linha capturada e popula determinadas colunas desse registro, certo?
Minha ideia de criar uma List de String foi só para saber se tinha entendido o seu problema. Olhando melhor, seu loop já vai iteirar o arquivo linha a linha.
Sua string SQL não funcioná dessa forma, porque a concatenação dos substrings de “s” está errada. Você pode usar o método “concat()” de String. É uma boa prática, inclusive.
Outra observação é que você passa 6 parâmetros de colunas e 7 valores para os parâmetros. Assim, também não funcionará nunca.
Para garantir, faria como o drigo.angelo sugeriu, dessa forma:

String sql = "INSERT INTO BATIDAS (ID, IGNORA1, DATA, HORA, IGNORA2, PIS, OUTRO) VALUES (?, ?, ?, ?, ?, ?, ?)"; PreparedStatement ps = ...//Cria o prepared statement usando seu Connection repassando a String "sql" ps.setString(1, s.substring(0,9)); // se o ID for um Integer no banco de dados, use "ps.setInt" (o mesmo para os demais - verifique os métodos de PreparedStatement) ps.setString(2, s.substring(9,10)); ps.setString(3, s.substring(10, 18)); ps.setString(4, s.substring(18,19)); ps.setString(5, s.substring(19, 22)); ps.setString(6, s.substring(22,23)); ps.setString(7, s.substring(23));
Se não for por aí, diga.

Agora conseguir visualizar, vou verificar aqui e ja venho responder !

O código compilou, porém não deu insert nenhum.

Apenas retornou o erro: “ClassNotFoundException: jdbc.sqlserver.SQLServerDriver”

Alguma luz?

package testsql;

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.*;
import java.sql.PreparedStatement;
import javax.swing.JOptionPane;




public class Main {

public static void main(String[] arguments){
       String conteudo = null;

       try
         {
                 Class.forName("jdbc.sqlserver.SQLServerDriver");

         }
         catch(java.lang.ClassNotFoundException e)
         {
                 System.err.print("ClassNotFoundException: ");
                 System.err.println(e.getMessage());
         }

       try{
         String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=CLEAN;user=sa;password=1234;";
         Connection con;
         Statement stmt;

         con = DriverManager.getConnection(connectionUrl);

         stmt = con.createStatement();

         //FileWriter x = new FileWriter("C:\Users\reinaldo.sales\Desktop\batidas_novas.txt",true);
         FileReader fr = new FileReader("C:\Users\reinaldo.sales\Desktop\batidas03-02-11.txt"); // Local do Arquivo
         BufferedReader br = new BufferedReader(fr); // Alterando da variável fr para br

         String s = "";


             while (( s = br.readLine() ) != null) {

             if (s.charAt(9) == '3') { // faz a comparação, se o indice 9 for igual a 3 ele faz isso ai em baixo

             conteudo += "\r\n"; // criando nova linha e recuo no arquivo
                PreparedStatement ps = con.prepareStatement("INSERT INTO BATIDAS (ID, IGNORA1, DATA, HORA, IGNORA2, PIS) VALUES (?, ?, ?, ?, ?, ?)");
                ps.setString(1, s.substring(0,9));    
                ps.setString(2, s.substring(9,10));
                ps.setString(3, s.substring(10, 18));
                ps.setString(4, s.substring(18,19));
                ps.setString(5, s.substring(19, 22));
                ps.setString(6, s.substring(22,23));
                }
            }
        }

       catch(Exception e){
          JOptionPane.showMessageDialog(null,e.getMessage(),"Atenção",JOptionPane.WARNING_MESSAGE);
       }
    }
}

Opa… Verifica, então, se você adicionou o driver jdbc do SQLServer no classpath da sua aplicação. Caso ainda assim não consiga, tente usar o da driver da Microsoft, baixando-o e mudando a string para: “com.microsoft.jdbc.sqlserver.SQLServerDriver”.

E então, brother? Conseguiu resolver o problema? Se conseguiu, diga como resolveu e marque o tópico como RESOLVIDO, para ajudar quem eventualmente se deparar com problema parecido ao teu.

Desculpa eu não atualizar, mas na verdade eu tive que dar uma abandonada nesse projeto, pois acabou que não será mais necessario para a empresa.

Vou ver se tenho algum tempo pra fazer novamente o programa e ver se dá certo, dai posto algo aqui.

Valeu !