Insert no banco sqlserver usando txt

15 respostas
snowblacksoul

Fala galera blz, estou com um problema na hora de inserir a informação vindo de um txt
se puderem me ajudar agradeço e muito ja tentei de tudo
vou colocar o código e depois o erro

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package importtxt.com.br;

import ConnectionFactory.ConnectionFactory;
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.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.swing.JOptionPane;
import persistenciadados.com.br.Dados;

/**
 *
 * @author E449045
 *     int produto_comercial;
int nrc;
int sistema;
int segmento;
String classe;
int terminal;
int localidade;
int cd_cliente;
int cd_conta;
int cd_pc;
String tp_prte;
int dt_ini_prqe;
int dt_fim_prqe;
int dt_ins_prqe;
int dt_ret_prqe;
int dh_prte;
String in_mgro_atis_in;
String in_mgro_atis_ac;
String in_mgro_atis_fa;
String in_mgro_atis_co;
 */
public class ImportTxt {

    public static final int Xms256M = 0;
    public static final int Xmx512M = 0;
    public static String dt_ciclo;
    public static int msg;
    public static String dt_mes_ftra;
    public static String dt_data;
    public static String dt_corte;

    //private final String dt_ciclo;
    // private final String dt_mes_ftra;
    // private final String dt_data;
    // private final String dt_corte;
    public ImportTxt() throws InterruptedException, FileNotFoundException, SQLException, IOException, ClassNotFoundException {
        try {
            System.out.println("Teste");
            File file = new File("D:/publico/201107/PARQUE_CONTRATADO_" + dt_data + ".txt"); // o path do arquivo, ex.: "C:\Importacao.txt"  
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            Connection con = new ConnectionFactory().getConnection();

            java.sql.Statement stmt = con.createStatement();

            List<Dados> listDados = new ArrayList<Dados>();
            while (bufferedReader.ready()) {

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

                Dados dd = new Dados();
                dd.setPRODUTO_COMERCIAL(arrayDados[0]);
                dd.setNRC(arrayDados[1]);
                dd.setSISTEMA(arrayDados[2]);
                dd.setDT_INI_PRQE(arrayDados[3]);
                dd.setDT_FIM_PRQE(arrayDados[4]);
                dd.setDT_INS_PRQE(arrayDados[5]);
                dd.setDT_RET_PRQE(arrayDados[6]);
                dd.setTERMINAL(arrayDados[7]);
                dd.setLOCALIDADE(arrayDados[8]);
                dd.setCLASSE(arrayDados[9]);
                dd.setSTATUS_PC(arrayDados[10]);
                dd.setMOTIVO_PC(arrayDados[11]);
                dd.setCOD_CLI(arrayDados[12]);
                dd.setCOD_CONTA(arrayDados[13]);
                dd.setDT_ALT_CNTA(arrayDados[14]);
                dd.setDT_BAI_CNTA(arrayDados[15]);
                dd.setDT_INI_CNTA(arrayDados[16]);
                dd.setDT_FIM_CNTA(arrayDados[17]);
                dd.setSTATUS_CONTA(arrayDados[18]);
                dd.setSTOP_FATURAMENTO(arrayDados[19]);
                dd.setSEGMENTO(arrayDados[20]);
                dd.setCICLO(arrayDados[21]);

                listDados.add(dd);


                String sql = "INSERT INTO TERADATA_201111.dbo.PQ_CTD_20111104(PRODUTO_COMERCIAL,NRC,SISTEMA,DT_INI_PRQE,DT_FIM_PRQE,DT_INS_PRQE,DT_RET_PRQE,TERMINAL,LOCALIDADE,CLASSE,STATUS_PC,MOTIVO_PC,COD_CLI,COD_CONTA,DT_ALT_CNTA,DT_BAI_CNTA,DT_INI_CNTA,DT_FIM_CNTA,STATUS_CONTA,STOP_FATURAMENTO,SEGMENTO,CICLO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
                PreparedStatement st = con.prepareStatement(sql);
                
                st.setString(1, dd.getPRODUTO_COMERCIAL());
                st.setString(2, dd.getNRC());
                st.setString(3, dd.getSISTEMA());
                st.setString(4, dd.getDT_INI_PRQE());
                st.setString(5, dd.getDT_FIM_PRQE());
                st.setString(6, dd.getDT_INS_PRQE());
                st.setString(7, dd.getDT_RET_PRQE());
                st.setString(8, dd.getTERMINAL());
                st.setString(9, dd.getLOCALIDADE());
                st.setString(10,dd.getCLASSE());
                st.setString(11,dd.getSTATUS_PC());
                st.setString(12,dd.getMOTIVO_PC());             
                st.setString(13,dd.getCOD_CLI());
                st.setString(14,dd.getCOD_CONTA());
                st.setString(15,dd.getDT_ALT_CNTA());
                st.setString(16,dd.getDT_BAI_CNTA());
                st.setString(17,dd.getDT_INI_CNTA());
                st.setString(18,dd.getDT_FIM_CNTA());
                  st.setString(19, dd.getSTATUS_CONTA());
                st.setString(20, dd.getSTOP_FATURAMENTO());
                st.setString(21, dd.getSEGMENTO());
                st.setString(22,dd.getCICLO());
                
                
/*
 * 	[PRODUTO_COMERCIAL] [numeric](18, 0) NULL,
	[NRC] [varchar](15) NULL,
	[SISTEMA] [numeric](18, 0) NULL,
	[DT_INI_PRQE] [numeric](18, 0) NULL,
	[DT_FIM_PRQE] [numeric](18, 0) NULL,
	[DT_INS_PRQE] [numeric](18, 0) NULL,
	[DT_RET_PRQE] [numeric](18, 0) NULL,
	[TERMINAL] [numeric](18, 0) NULL,
	[LOCALIDADE] [numeric](18, 0) NULL,
	[CLASSE] [varchar](7) NULL,
	[STATUS_PC] [varchar](2) NULL,
	[MOTIVO_PC] [varchar](4) NULL,
	[COD_CLI] [numeric](18, 0) NULL,
	[COD_CONTA] [numeric](18, 0) NULL,
	[DT_ALT_CNTA] [numeric](18, 0) NULL,
	[DT_BAI_CNTA] [numeric](18, 0) NULL,
	[DT_INI_CNTA] [numeric](18, 0) NULL,
	[DT_FIM_CNTA] [numeric](18, 0) NULL,
	[STATUS_CONTA] [varchar](2) NULL,
	[STOP_FATURAMENTO] [varchar](1) NULL,
	[SEGMENTO] [smallint] NULL,
	[CICLO] [smallint] NULL,
 */
                
                System.out.println("Importando!");
                st.execute();
                st.close();
            }


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



        }
    }

    private String indexOf(String pRODUTO_COMERCIAL) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

erro!!!

dt_ciclo 04 Periodo 18
Teste
Conectando ao banco SQLServer
Importando!
java.sql.SQLException: Error converting data type nvarchar to numeric.
	at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365)
	at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781)
	at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224)
	at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628)
	at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:525)
	at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:487)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.execute(JtdsPreparedStatement.java:475)
	at importtxt.com.br.ImportTxt.<init>(ImportTxt.java:425)
	at pqcontratado.PqContratado.main(PqContratado.java:45)

15 Respostas

E
  1. Imprima o valor do campo que teve problema de conversão

  2. Diga qual é o campo da tabela que teve problema de conversão.

  3. Você poderia se dignar a pelo menos postar a linha do arquivo texto que você estava lendo e que provocou esse problema?

  4. Que tal usar o Eclipse ou o NetBeans e ir debugando seu programa linha por linha?

  5. Você só sabe usar “setString” ou é preguiça mesmo?

snowblacksoul

Bom estou usando o Netbeans, bom estou usando setString pois foi assim que falaram pra eu fazer
se tiver outra forma de fazer isso eu agradeço.

Ja os dados que estao pegando são esses

Não está aparecendo o valor do campo que teve problemas de conversao
coloquei o erro que está dando e nao esta mostrando!!

M

Bom, analisando o problema, entendo que você so usou ps.setString, porém tem alguns campos que são do tipo numeric, e esses devem ser tratados como numeric.

// você fez assim
st.setString(4, dd.getDT_INI_PRQE()); 

//eu acredito que deveria ser assim
st.setInt(4, Integer.parseInt(dd.getDT_INI_PRQE())); // se o numero for inteiro mesmo, sem ponto flutuante

Mas isso tem que ser feito em todos os campos do tipo numeric.

Boa sorte

snowblacksoul

Pois é Murilo_Ferreira eu já fiz isso e continua a dar o mesmo erro!!
muito estranho

Quando coloco do jeito que passou dar esse erro aqui

java.lang.NumberFormatException: For input string: "203271644685"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Integer.parseInt(Integer.java:461)
	at java.lang.Integer.parseInt(Integer.java:499)
	at importtxt.com.br.ImportTxt.<init>(ImportTxt.java:376)
	at pqcontratado.PqContratado.main(PqContratado.java:45)
M

OK, mas você mudou em todos que são do tipo NUMERIC?

snowblacksoul

Murilo_Ferreira já no primeiro quando estou debugando ja dar o erro!

M

snowblacksoul

O que estou tentando dizer é o seguinte, mude todos esses parametros para ps.setInt

Parametros: 1, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 21 e 22.

todos esses você deve tocar ps.setString por ps.setInt

Boa sorte.

snowblacksoul

Entao Murilo_Ferreira eu fiz exatamente como falou , mas ainda da erro

M

Exemplo:

st.setInt(1, Integer.parseInt(dd.getPRODUTO_COMERCIAL()));
                st.setString(2, dd.getNRC());
                st.setInt(3, Integer.parseInt(dd.getSISTEMA()));
                st.setInt(4, Integer.parseInt(dd.getDT_INI_PRQE()));
                st.setInt(5, Integer.parseInt(dd.getDT_FIM_PRQE()));
                st.setInt(6, Integer.parseInt(dd.getDT_INS_PRQE()));
                st.setInt(7, Integer.parseInt(dd.getDT_RET_PRQE()));
                st.setInt(8, Integer.parseInt(dd.getTERMINAL()));
                st.setInt(9, Integer.parseInt(dd.getLOCALIDADE()));
                st.setString(10,dd.getCLASSE());
                st.setString(11,dd.getSTATUS_PC());
                st.setString(12,dd.getMOTIVO_PC());             
                st.setInt(13, Integer.parseInt(dd.getCOD_CLI()));
                st.setInt(14, Integer.parseInt(dd.getCOD_CONTA()));
                st.setInt(15, Integer.parseInt(dd.getDT_ALT_CNTA()));
                st.setInt(16, Integer.parseInt(dd.getDT_BAI_CNTA()));
                st.setInt(17, Integer.parseInt(dd.getDT_INI_CNTA()));
                st.setInt(18, Integer.parseInt(dd.getDT_FIM_CNTA()));
                st.setString(19, dd.getSTATUS_CONTA());
                st.setString(20, dd.getSTOP_FATURAMENTO());
                st.setInt(21, Integer.parseInt(dd.getSEGMENTO()));
                st.setInt(22, Integer.parseInt(dd.getCICLO()));
M

Qualquer coisa, posta o erro por completo aqui.

E

snowblacksoul:
Bom estou usando o Netbeans, bom estou usando setString pois foi assim que falaram pra eu fazer

Se lhe falarem para se jogar pela janela do 38º andar sem para-quedas, o que você faz?

a) Me jogo mesmo, porque é assim que me falaram para eu fazer
b) Levo na esportiva e vou fazer o que deve ser feito, não o que falaram para eu fazer
c) Processo o meu chefe por assédio moral parfa ele deixar de ser trouxa
d) Paro de tentar responder esse teste idiota que estão me passando aqui

M
Pois é Murilo_Ferreira eu já fiz isso e continua a dar o mesmo erro!! muito estranho

Quando coloco do jeito que passou dar esse erro aqui
[/code]
java.lang.NumberFormatException: For input string: "203271644685"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:461)
at java.lang.Integer.parseInt(Integer.java:499)
at importtxt.com.br.ImportTxt.<init>(ImportTxt.java:376)
at pqcontratado.PqContratado.main(PqContratado.java:45)
[code]

Acho que vc poderia usar LONG, realmente esse numero é grande e estoura o limite de INT.

Boa sorte

snowblacksoul

Valeu Murilo_Ferreira!!! brigadão cara vou fazendo aqui e coloco o resultado
valeu mesmo

M

entanglement
Acho que todos que abrem um tópico aqui é que tem algum tipo de dificuldade ou precisam de algum tipo de ajuda,
é os bons proffissionais que tem eficiência, conhecimento, competência e força de vontade de ajudar e aprender
postam respostas aqui de forma que possa ajudar ou esclarecer a dúvida alguém.

Portanto não entendo o porque de sua critica.

E

entanglement:
snowblacksoul:
Bom estou usando o Netbeans, bom estou usando setString pois foi assim que falaram pra eu fazer

Se lhe falarem para se jogar pela janela do 38º andar sem para-quedas, o que você faz?

Quando eu disse isso é porque é muito comum as pessoas aqui fazerem algo de uma determinada maneira “porque me falaram que tem de fazer de um determinado jeito”, sem questionar. Na verdade, as coisas têm de ser feitas do jeito certo, e muitas vezes é necessário pesquisar um pouco (procurar no Javadoc, por exemplo) em vez de fazer as coisas “do jeito que lhe falaram”. Não estou dizendo que você é mau ou bom profissional. Estou só dizendo que você tem de saber questionar e procurar as coisas por si só também, em vez de só aceitar o que lhe dizem e abaixar a cabeça.

Criado 23 de novembro de 2011
Ultima resposta 23 de nov. de 2011
Respostas 15
Participantes 3