Importar aquivo csv para o banco mysql

bom dia

estou tentando importar dados de uma planilha para o banco. mas não não estou conseguindo.

segue codigo…

public void csv(){
Path a = Paths.get(“K:\arquivo\protocolo.csv”);
boolean exists = Files.exists(a);
boolean notExists = Files.notExists(a);
if (exists) {
System.out.println(“File exists!”);
System.out.println(“executando”);
Protocolo protocolo = new Protocolo();
ProtocoloJpaDAO.getInstance().removeAll();
System.out.println(“excluir protoclos”);
File arquivoCSV = new File (“K:\arquivo\protocolo.csv”);
System.out.println(“iniciar”);
try{
String linha = new String();
Scanner scan = new Scanner(arquivoCSV);
scan.nextLine();
scan.nextLine();
System.out.println(arquivoCSV);
System.out.println(“inserindo”);
while(scan.hasNext()) {
linha = scan.nextLine();
String[] valores = linha.split(";");
if(valores[0].length() > 0) {
protocolo.setCd(valores[0]);
protocolo.setProtocolo(valores[1]);
protocolo.setData(valores[2]);
protocolo.setCod_produto(valores[3]);
protocolo.setDescricao(valores[4]);
protocolo.setQtd_dev(valores[5]);
protocolo.setVlr_dev(valores[6]);
protocolo.setNf_venda(valores[7]);
protocolo.setDta_venda(valores[8]);
protocolo.setPromo(valores[9]);
protocolo.setQtd_venda(valores[10]);
protocolo.setVlr_venda(valores[11]);
protocolo.setMotivo_dev(valores[12]);
protocolo.setDesc_dev(valores[13]);
protocolo.setCod_dev(valores[14]);
protocolo.setDesc_motivo(valores[15]);
protocolo.setJustificativa(valores[16]);
protocolo.setCod_cliente(valores[17]);
protocolo.setRazao(valores[18]);
protocolo.setSetor(valores[19]);
protocolo.setSupervisor(valores[20]);
protocolo.setCod_representante(valores[21]);
protocolo.setRepresentante(valores[22]);
protocolo.setRota_roteiro(valores[23]);
protocolo.setStatus_protocolo(valores[24]);
protocolo.setAutorizacao_log(valores[25]);
protocolo.setDta_autorizacao_log(valores[26]);
protocolo.setAutorizador_coleta(valores[27]);
protocolo.setDta_aut_coleta(valores[28]);
protocolo.setResponsavel_reprova(valores[29]);
protocolo.setDta_reprova(valores[30]);
protocolo.setMotivo_reprova(valores[31]);
protocolo.setEm_conferencia(valores[32]);
protocolo.setColetado(valores[33]);
protocolo.setDta_coletado(valores[34]);
protocolo.setDta_chegada(valores[35]);
protocolo.setDigitacao(valores[36]);
protocolo.setDta_digitacao(valores[37]);
protocolo.setUpload(valores[38]);
protocolo.setDev_total(valores[39]);
protocolo.setProtocolo_reenviado(valores[40]);
protocolo.setProtocolo_ant(valores[41]);
protocolo.setTipo_devolucao(valores[42]);
protocolo.setAutorizacao_coleta(valores[43]);
protocolo.setCd(valores[44]);
protocolo.setDta_autorizacao(valores[45]);
ProtocoloJpaDAO.getInstance().merge(protocolo);
}
linha = scan.nextLine();
}
scan.close();
//arquivoCSV.delete();
}catch(Exception e) {
e.printStackTrace();
}
} else if (notExists) {
System.out.println(“File doesn’t exist!”);
}
}

Qual o erro que está acontecendo?
Eu se fosse você, instanciaria o Protocolo dentro do laço e salvaria com o método persist ao invés de merge.

bom dia
eu aplico o mesmo cod em outra importação de csv, mas para essa planilha aparace esse erro na linha do cod “scan.nextLine()”

e se retiro o scan.nextLine() ele não da continuidade na importação mas não aparece erro…
segue erro…

<<<
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at com.utils.UploadCsv.executaUpload(UploadCsv.java:95)
at com.utils.UploadCsv.upload(UploadCsv.java:47)
at com.principal.FrameAtualizar$2.run(FrameAtualizar.java:119)

se tiver outro cod para importação de arquivo csv ou xml já ajuda…
obrigado

É que você está chamando o método nextLine() sem ter verificado se o hasNextLine() é verdadeiro.

Dei uma pequena refatorada pro seu código ficar mais legível:

public void importarArquivoCsv() {
    File arquivoCSV = new File("K:\\arquivo\\protocolo.csv");
    if (arquivoCSV.exists()) {
        System.out.println("File exists!");
        lerArquivoCsv(arquivoCSV);
    } else {
        System.out.println("File doesn’t exist!");
    }
}

private void lerArquivoCsv(File arquivoCSV) {
    System.out.println("executando");
    ProtocoloJpaDAO dao = ProtocoloJpaDAO.getInstance();
    System.out.println("excluir protoclos");
    dao.removeAll();
    System.out.println("iniciar");
    try (Scanner scan = new Scanner(arquivoCSV)) {
        if (!scan.hasNextLine()) {
            return; // não tem a primeira linha no arquivo
        }
        scan.nextLine();
        if (!scan.hasNextLine()) {
            return; // não tem a segunda linha no arquivo
        }
        scan.nextLine();
        System.out.println(arquivoCSV);
        System.out.println("inserindo");
        while (scan.hasNext()) {
            String linha = scan.nextLine();
            String[] valores = linha.split(";");
            if (valores[0].length() > 0) {
                Protocolo protocolo = criarProtocolo(valores);
                dao.merge(protocolo);
            }
        }
        scan.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private Protocolo criarProtocolo(String[] valores) {
    Protocolo protocolo = new Protocolo();
    protocolo.setCd(valores[0]);
    protocolo.setProtocolo(valores[1]);
    protocolo.setData(valores[2]);
    protocolo.setCod_produto(valores[3]);
    protocolo.setDescricao(valores[4]);
    protocolo.setQtd_dev(valores[5]);
    protocolo.setVlr_dev(valores[6]);
    protocolo.setNf_venda(valores[7]);
    protocolo.setDta_venda(valores[8]);
    protocolo.setPromo(valores[9]);
    protocolo.setQtd_venda(valores[10]);
    protocolo.setVlr_venda(valores[11]);
    protocolo.setMotivo_dev(valores[12]);
    protocolo.setDesc_dev(valores[13]);
    protocolo.setCod_dev(valores[14]);
    protocolo.setDesc_motivo(valores[15]);
    protocolo.setJustificativa(valores[16]);
    protocolo.setCod_cliente(valores[17]);
    protocolo.setRazao(valores[18]);
    protocolo.setSetor(valores[19]);
    protocolo.setSupervisor(valores[20]);
    protocolo.setCod_representante(valores[21]);
    protocolo.setRepresentante(valores[22]);
    protocolo.setRota_roteiro(valores[23]);
    protocolo.setStatus_protocolo(valores[24]);
    protocolo.setAutorizacao_log(valores[25]);
    protocolo.setDta_autorizacao_log(valores[26]);
    protocolo.setAutorizador_coleta(valores[27]);
    protocolo.setDta_aut_coleta(valores[28]);
    protocolo.setResponsavel_reprova(valores[29]);
    protocolo.setDta_reprova(valores[30]);
    protocolo.setMotivo_reprova(valores[31]);
    protocolo.setEm_conferencia(valores[32]);
    protocolo.setColetado(valores[33]);
    protocolo.setDta_coletado(valores[34]);
    protocolo.setDta_chegada(valores[35]);
    protocolo.setDigitacao(valores[36]);
    protocolo.setDta_digitacao(valores[37]);
    protocolo.setUpload(valores[38]);
    protocolo.setDev_total(valores[39]);
    protocolo.setProtocolo_reenviado(valores[40]);
    protocolo.setProtocolo_ant(valores[41]);
    protocolo.setTipo_devolucao(valores[42]);
    protocolo.setAutorizacao_coleta(valores[43]);
    protocolo.setCd(valores[44]);
    protocolo.setDta_autorizacao(valores[45]);
    return protocolo;
}

boa noite
mesmo assim não faz a importação. ele para na primeira verificação.

“excluir protoclos
jun 01, 2018 10:50:01 PM org.hibernate.ejb.internal.EntityManagerFactoryRegistry addEntityManagerFactory
WARN: HHH000436: Entity manager factory name (crudHibernatePU) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name’
Hibernate: TRUNCATE protocolo
iniciar
não tem a primeira linha no arquivo”

até arrumei o arquivo para conter a primeira linha, e mesmo assim não importou.
alguma ideia?
obrigado

boa noite
conf.txt (4,1 KB)


tetei aplicar em outro arquivo e aparece o seguinte erro…

Veja a query, está tentando inserir a palavra reservada set.

bom dia

consegui fazer o importe…

o minha dificuldade agora é fazer que a cada atualização no banco o campo txt traga a informação nova.

estou usando um tread para atualizar as informações, mas o campo txt não muda a informação, e também não da nenhum erro. mesmo eu zerando o campo txt e fazendo o for() novamente.
por mais que as informações mudem ele sempre trás a informação que ele buscou ao iniciar o frame.
o for() não consegue trazer a informação nova… trás sempre a informação que já buscou ao inicializar.

como faço para ele zerar a memoria e conseguir sobrepor as informações?

segue codigo do for()

public void teste(){
List pln = AtzJpaDAO.getInstance().findAll();

  int codigo = 0;
  String nome = "0";
  int h1 = 0;
  int h2 = 0;
  int h3 = 0;
         
   
   for (int b = 0; b < pln.size(); b++) {
      
        String codigoTemp = "0";
        codigoTemp = pln.get(b).getCodigo().replace(" ", "");
        codigo = Integer.parseInt(codigoTemp);
        //System.out.println("Mtricula " + codigo);
       
            if(Integer.toString(codigo).equals(codigoTxt.getText())){ 
            //System.out.println(" inicio");
            
             String nomeTemp = "0";
             nomeTemp = pln.get(b).getNome().replace(" ", "");
             nome = (nomeTemp);
             nomeTxt.setText(nome);
            //System.out.println("Nome " + nome);
          
            if( pln.get(b).getH1().length() > 0){
            String tempH1 = "0";
            tempH1 = pln.get(b).getH1().replace(" ", "");
            tempH1 = tempH1.replace(".", "");
            if(tempH1.trim().length() > 0){
            h1 = Integer.parseInt(tempH1);
             priTxt.setText(Integer.toString(h1));
            //System.out.println("h1 " + h1);
            
           
            }
            }
            if(pln.get(b).getH2().length() > 0){
            String tempH2 = "0";
            tempH2 = pln.get(b).getH2().replace(" ", "");
            tempH2 = tempH2.replace(".", "");
            if(tempH2.trim().length() > 0){
            h2 = Integer.parseInt(tempH2);
            segTxt.setText(Integer.toString(h2));
            //System.out.println("h2 " + h2);      
            }
            }
            if(pln.get(b).getH3().length() > 0){
            String tempH3 = "0";
            tempH3 = pln.get(b).getH3().replace(" ", "");
            tempH3 = tempH3.replace(".", "");
            if(tempH3.trim().length() >0){
            h3 = Integer.parseInt(tempH3);
            terTxt.setText(Integer.toString(h3));
            //System.out.println("h3 " + h3);     
            }
         }
      }
    }
   }