Galera to com o prazo do meu Projeto esgotado e tipo so falta uma parte e creio que ela e bem pequna so que n sei como q se faz!! e assim
ja teh postei aki no forum voçês vaum reclamar q postei repetido e tal mas to meio desesperado então to fazendo isso para ver se alguem consegue me ajudar!! bom meu problema e o seguinte:
necessito ler um arquivo CSV e inserir ele numa tabela MYSQL bom ai tenho varias duvidas inclusive como se faz isso ja procurei no google não axo so o q axo saum pedaços e ainda pedaços que n estão completo!!!
tipo eu tenho de fazer upload nele para poder trataro arquivo e inserir no mysql???eu uso a RandomAccessFile para ler o arquivo aleatoriamente(pq n sera um arquivo comum que ficara num diretorio ja pre especificado ele ficara disperso aleatoriamente pelo pc do usuario??Como faço no jsp para chamar o arquivo atraves de request.getParameter() ou como??Depois de ler linha a linha como faço para ele inserir no banco??Não pode ser Load tem de ser insert???Tipo load eu sei q so pode se estiver no servidor ou algo asim não eh??Bom ai seguem algumas de minhas duvidas!!! por favor me ajudem estou muito necessitado!!!
Você usa RandomAccessFile não é porque o arquivo está disperso aleatoriamente no pc do usuario, e sim porque você quer ler as linhas aleatoriamente, não de forma sequencial. Nao tem a ver com o que você está pensando.
Usa o Commons Upload que passei aí em cima!
Leia uma linha, use split() para separar os valores e faça um sql para inserir no banco…
ex.:
String linha = //ler
String[] campos = linha.split(";");
//inserir no banco
Não entendi!
J
jpachecoPJ
cara tu ja me ajudo um monte!!! mas tipo a parte do load la n ten nada a ver pq tipo eu tava perguntando se n dava para fazer um load direto do servidor para o mysql mas pelo vito o cara va ter de fazer insert naum eh??? agora mesmo ja vou la dar uma olhada!!! mas meu qualquer coisa se tu poder continuar a dar uma olhada neste meu topico para me tirar alguma possivel duvida eu agradeço ok!!! mas por enquanto vou dar um olhada la!! se eu tiver duvidas posto se naum eu colocarei ai um aviso dizendo q consegui e lhe agradeçendo!! ahh e vc me ajudou muito esclarecendo sobre RandomAccessFile!! eh eu pensava q servia para ler aleatoriamente no pc e n o arquivo!! Valew e vo la agora!!
J
jpachecoPJ
Bom cara axo q to no caminho certo tipo eu axei aki no portaljava mesmo um tutorial pdf q ensina a fezer upload de fotos para o banco mysql fiz umas alterações nele para se adequar a arquivos e queria q vc desse uma olhada:
<%@pagelanguage="java"import="org.apache.commons.fileupload.*,java.util.*,java.sql.*"%><%@includefile="../conecta/acesso.jsp"%><html><bodycolor="#FFFFFF"><%//verificandoseoformpossuicamposcomdadosbinariosif(FileUpload.isMultipartContent(request)){//criandooobjetoparacuidardouploadDiskFileUploadfu=newDiskFileUpload();//setandotamanhomaximodebytesparauploadfu.setSizeMax(800000);try{//parseandoarequisiçãoeretornandoumalistacomoscampos//encontrando,tantotextos,quantodadosbinarios(arquivos binarios)Listitems=fu.parseRequest(request);Iteratori=items.iterator();FileItemfi;Stringcmt=null;//laçoparapegartodososcamposdoformwhile(i.hasNext()){fi=(FileItem)i.next();//testeparaverseocampoemquestãoéocampodoformulario//ouumarquivoif(fi.isFormField()){//pegandoocampodoformulario(comentario)cmt=fi.getString();} else{//obtendootamanhodoarquivointsize=(int) fi.getSize();//arraydebyteparaarmazenarafotobyte[] arq = new byte[size];//carregandooarquivonoarrayupload.read(arq, 0, size);//ondetem?serasubstituidoporvaloresposteriormente.PreparedStatementpstm=con.prepareStatement("INSERT INTO custos");//inserindocomentarionolugardaprimeirainterrogaçãopstm.setBytes(2, cmt);//inserindoarquivonolugardasegundainterrogaçãopstm.setBytes(2, arq);//executandoaquerypstm.executeUpdate();}}} catch(java.io.FileNotFoundException e) {out.println("Erro no upload do arquivo");} catch(SQLException e) {out.println("Erro na consulta com o banco de dados");} catch(Exception e){out.println(e.getMessage());}} else {out.println("O formulario nao possui dados binarios");}%><h2>Arquivoinseridocomsucesso</h2></body></html>
bom a parte do comentario farte do arquivo de fotos q axei axo q da pra tirar ela mas ninha duvida e a seguinte como faço o insert do arquivo no banco??? o arqiuvo q eles liam era uma foto jpeg e eu qro inserir um csv
no caso eles so tinham um campo neh!! eu teria 5 campos no csv e 5 na tabela um devera passar para o outro!!! como faço este insert??? tenho de mudar o jsp acima????
Aguardo!!!
[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:
J
jaireltonPJ
Leia linha por linha e faça algo mais ou menos assim:
Stringlinha=//lerString[] dados = linha.split(";");PreparedStatementstmt=conexao.prepareStatement("insert into tabela(campo1, campo2, campo3, campo4, campo5) values (?, ?, ?, ?, ?)");for(int i=0;i<dados.length;i++){stmt.setString(i+1, dados[i]);}stmt.executeUpdate();
J
jpachecoPJ
cara desculpe minha ignorancia !! mas tipo na parte de da string linha o q fica no lugar de ler???que vc colocou??
e os dados no caso eles saum os dados do csv?? eles n precisam ser declarados um a um para entaum usar o PreparedStatement???
J
jaireltonPJ
mas tipo na parte de da string linha o q fica no lugar de ler????que vc colocou??
Filearq=newFile("path do arquivo");BufferedReaderbr=newBufferedReader(new FileReader(arq));PreparedStatementstmt=conexao.prepareStatement("insert into tabela(campo1, campo2, campo3, campo4, campo5) values (?, ?, ?, ?, ?)");while(br.ready()){Stringlinha=br.readLine();String[] dados = linha.split(";");stmt.clearParameters();for(int i=0;i<dados.length;i++){stmt.setString(i+1, dados[i]);}stmt.executeUpdate();}
J
jpachecoPJ
hummm!! mas então não e necessario fazer o upload do arquivo?? e so ler ele e inserir?? assim como vc fez???
J
jaireltonPJ
Precisa, não tem como você acessar o arquivo no computador do cliente não!
esse ‘path do arquivo’ é o caminho do arquivo no servidor, depois de você já ter gravado ele no servidor!
J
jpachecoPJ
ahhh ta!! e como no php n tem como ler o arquivo no pc do usuario!!!
bom mas então tipo terei de usar akele jsp de upload que te mostrei neh!! mas tipo ele e pra fotos sabe como eu faço para adaptar ele para este arquivo e fazer com q ele jogue o arquivo dentro do path especificado???
//laçoparapegartodososcamposdoformwhile(i.hasNext()){fi=(FileItem)i.next();//testeparaverseocampoemquestãoéocampodoformulario//ouumarquivoif(fi.isFormField()){//pegandoocampodoformulario(comentario)cmt=fi.getString();}else{//obtendootamanhodoarquivointsize=(int)fi.getSize();//arraydebyteparaarmazenarafotobyte[]arq=newbyte[size];//carregandooarquivonoarrayupload.read(arq,0,size);}}}catch(java.io.FileNotFoundExceptione){out.println("Erro no upload do arquivo");}catch(SQLExceptione){out.println("Erro na consulta com o banco de dados");}catch(Exceptione){out.println(e.getMessage());}
creio q graças a voçê ja esta quase concluido esta parte!! so que tipo como eu faço para integrar um ao outro e tbn o resto da parte do upload!??
J
jaireltonPJ
}else{//obtendootamanhodoarquivointsize=(int) fi.getSize();//arraydebyteparaarmazenarafotobyte[] arq = new byte[size];//carregandooarquivonoarrayupload.read(arq, 0, size);FileOutputStreamout=newFileOutputStream("path para salvar");out.write(arq);out.close();}
J
jpachecoPJ
Bom fiz uma outra jsp para fazer upload:
porem ela da este erro qndo se tenta fazer o upload:
Voçê n saberia o pq???
Valew!!!
G
Guilherme_MelloPJ
Parece que a classe DeferredFileOutputStream não está no classpath.
J
jaireltonPJ
Está faltando essa classe aí!
Veja se não tem um JAR com ela por aí!
J
jpachecoPJ
sim mas tipo e um jar da classe io??? ou ela possui o nome de DeferredFileOutputStream???
e so colocar o jar dela no lib???
if(item.isFormField()){out.println("SIZE:"+item.getSize());File fNew= new File(application.getRealPath("/"),item.getName());out.println(fNew.getAbsolutePath());item.write(fNew);}elseout.println(“Field=”+item.getFieldName());
}
%>
J
jpachecoPJ
ahh e desculpe!!!
trokei e agora estou usando com jsp de upload este aki
mas da este erro aki
n falta algum import ai?? tipo o do commons novo q coloquei no projeto???
e tipo onde q eu vejo defino onde vai ficar o arquivo depois de feito o upload??
no fu.setRepositoryPath("/tmp"); ou no fichero = new File(“c:\ficherossubidos\” + fichero.getName());
valew!!!
ahh e se tem algo de errada no jsp onde que esta o erro???valew!!
J
jaireltonPJ
Tente assim:
File fichero = new File(fileName);
out.println("O nome do ficheiro é " + fichero.getName());
fichero = new File("c:\\ficherossubidos\\" + fichero.getName());
if(!fichero.exists()){
fichero.createNewFile();
}
actual.write(fichero);
J
jpachecoPJ
cara mesmo assim continua dando este aviso:
O numero de ficheiros é: 1
Ficheiro C:\Documents and Settings\julpac\Desktop\impressoras.csv
O nome do ficheiro é impressoras.csv O sistema não pode encontrar o caminho especificado
fu.setSizeThreshold(4096);fu.setRepositoryPath("/tmp");ListfileItems=fu.parseRequest(request);if(fileItems==null){out.println("A lista é nula!!");}out.print("<br>O numero de ficheiros é: "+fileItems.size());Iteratori=fileItems.iterator();FileItemactual=null;while(i.hasNext()){actual=(FileItem)i.next();StringfileName=actual.getName();out.println("<br>Ficheiro "+fileName);// determinando o local do ficheiroFilefichero=newFile(fileName);out.println("<br>O nome do ficheiro é "+fichero.getName());fichero=newFile("c:\\ficherossubidos\\"+fichero.getName());if(!fichero.exists()){fichero.createNewFile();}actual.write(fichero);}}catch(Exceptione){out.println(e.getMessage());}
}
%>
afinal o q tem ela q n funciona???
e para onde ele vai levar o arquivo??para a pasta tempo?ou para o c:???
J
jpachecoPJ
cara olha so!!! era eu q ratiei agora eu sei q era nesta parte aki!!!
mas tipo como eu faço para colocar o arquivo e um diretorio assim:
sem ter de escrever todo o caminho???
tipo
???
tipo tentei como ali em cima mas n deu certo!!!
J
jaireltonPJ
String pasta = getServletContext().getRealPath("/arquivo_csv");
fichero = new File(pasta+File.separator+fichero.getName());
J
jpachecoPJ
cara olha so o upload so funciona qndo eu clico em qualquer botão do formulario mas tipo eu qria q ele qndo buscasse ja fizze o upload ao mesmo tempo tipo tu clica em procura e ele ja faz a busca entendeu pq dai do lado teria o botaão de importar onde importaria para o banco!! dai tipo o q eu teria de mudar no formulario e no jsp de upload??
cara funciono como uma maravilha!!! so q tipo pq sera q n funciona a String pasta q vc falou para min criar?? pq simplesmente ele n faz o upload qndo eu uso ela ao invez de setar todo o caminho!!!??
J
jpachecoPJ
cara desculpa tantas perguntas e tbn por eue star usando dois posts tbn,mas e q estou sob muita pressao!!! tipo
e para o cara fazer o upload e logo em seguida ja fazer o insert no banco tentei da maneira abaixo mas n funcionou ele so fez o upload mas n inseriu nada!!!
por favor agora so falta isso veio!!
J
jpachecoPJ
cara assim consegui veio!!! deu certo aki!! ele faz o upload e ja insere no banco tudo corretamente!!! meu valew mesmo tu foi de muita ajuda nesta parte certamente q eu n conseguiria isso se vc n tivesse me ajudado!!! valew mesmo
e a correção ali de cima fica assim o cara so precisa setar o nome do arquivo qndo instancia o FileReader fica assim:
so oq ainda falta e ver pq qndo se chama a String pasta
ela n funciona pq vc concatena pasta + File.separator pq da utilização doi File.separator ???
eu tentei so com pasta mas igual ele n axa o caminho e n acusa q se perde tbn!! isso e bem engraçado e so como se ele n fizesse o upload!!!
mas valew veio!!! vou ficar tentando aki!!!
J
jaireltonPJ
Não funciona?
O File.separator é pra adicionar a barra
J
jpachecoPJ
entendi ele vale como uma barra assim “/” !!!
J
jaireltonPJ
É o separador, no windows é \ no linux é /
J
jpachecoPJ
sim mas concatenando entaum ficaria o deretorio assim
“/admin/arquivo_csv” ???
pq ele ate insere no banco sabe so q n faz o upload para o servidor!!!
e tipo cara trokei o tipo mes no banco de int para varchar pq tava afim de fazer as datas estilo jan, fev e por ai vai sabe so q tipo qndo ele faz a inserção ele inser no banco os campos de cc_custo e mes com as pas do lado tipo assim:
n sei pq veio!! ele n concatena aspas em lugar algum!!!
e dai axei uma função q converte estes numeros tipo 01, 02, 03 em jan, fev, mar e por ai vai sabe dai fui trocar de volta para int(20) o campo mes e ele diz q o campo mes esta truncando os dados!!
onde sera o galho ai?? na tabela ou no csv???
pq no jsp n deve ser pq n mexi em nada nele!!! ateh trokei o campo mes e o valCopias um pelo outro no Insert e dai qndo troko ele acusa q o dai o valCopias esta com problema ou seja to axando q e no CSV mas tipo n sei o q la!!!
OBS.: eu refiz a tebela e os CSV pode ser a q algo tenha ficado diferente mas aparentemente naum!!