Urgente Por Favor ME ajudem!

31 respostas
J

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!!!

Agradeço a quem me ajudar ou tentar!!! Valew!!!

31 Respostas

J

Se o usuario vai te mandar o arquivo, então é um upload, você precisa salvar ele aí no servidor e depois ler. Dê uma olhada em http://jakarta.apache.org/commons/fileupload/

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

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
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:
<%@page language="java" import="org.apache.commons.fileupload.*, java.util.*, java.sql.*" %>
<%@include file="../conecta/acesso.jsp"%>

<html>
<body color="#FFFFFF">

<%
// verificando se o form possui campos com dados binarios
if(FileUpload.isMultipartContent(request)){
	//criando o objeto para cuidar do upload
	DiskFileUpload fu = new DiskFileUpload();
	// setando tamanho maximo de bytes  para upload
	fu.setSizeMax(800000);
	try
	{
		//parseando a requisição e retornando uma lista com os campos 
		// encontrando, tanto textos, quanto dados binarios(arquivos binarios)
		List items = fu.parseRequest(request);
		Iterator i = items.iterator();
		FileItem fi;
		String cmt = null;
		
		//laço para pegar todos os campos do form
		while(i.hasNext())
		{
			fi = (FileItem)i.next();
			// teste para ver  se o campo em questão é o campo do formulario
			// ou um arquivo 
			if(fi.isFormField())
			{
				//pegando o campo do formulario(comentario)
				cmt = fi.getString();
			} else
			{
				// obtendo o tamanho do arquivo 
				int size = (int) fi.getSize();
				// array de byte para armazenar a foto
				byte[] arq = new byte[size];
				// carregando o arquivo no array
				upload.read(arq, 0, size);
				
				// onde tem ? sera substituido por valores posteriormente.
				PreparedStatement pstm = con.prepareStatement("INSERT INTO custos");
				
				// inserindo comentario no lugar da primeira interrogação
				pstm.setBytes(2, cmt);
				// inserindo arquivo no lugar da segunda interrogação
				pstm.setBytes(2, arq);
				// executando a query
				pstm.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>Arquivo inserido com sucesso</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

Leia linha por linha e faça algo mais ou menos assim:

String linha = //ler
String[] dados = linha.split(";");
PreparedStatement stmt = 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

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
mas tipo na parte de da string linha o q fica no lugar de ler????que vc colocou??
File arq = new File("path do arquivo");

BufferedReader br = new BufferedReader(new FileReader(arq));

PreparedStatement stmt = conexao.prepareStatement("insert into tabela(campo1, campo2, campo3, campo4, campo5) values (?, ?, ?, ?, ?)");

while(br.ready()){
   String linha = 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

hummm!! mas então não e necessario fazer o upload do arquivo?? e so ler ele e inserir?? assim como vc fez???

J

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

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???

bom ateh agora tenho tres jsp que são:

index.jsp:

<html>
<head>
<title>Upload Do Arquivo</title>
</head>
<body color="#FFFFFF">
<h2 align=“center”>Incluir Arquivo no banco de dados</h2><br>
<form action=“importa.jsp” method=“post” enctype=“multipart/form-data” name=“arquivo_up” id=“arquivo_up”>
<table align=“center”>
<tr>
<th>
<input type=“file” name=“arquivo”>
</th>
<th>
<input type=“submit” value=“Enviar”>
</th>
</tr>
</table>
<br>
</form>
</body>
</html>

importa.jsp:

<%@page language=“java” import=“org.apache.commons.fileupload., java.util., java.sql., java.io.” %>
<%@include file="…/conecta/acesso.jsp"%>

<%

File arq = new File(path);

BufferedReader br = new BufferedReader(new FileReader(arq));

PreparedStatement  stmt= con.prepareStatement(INSERT INTO custos(cc_custo, impressoes, valImpress, copias, valCopias, mes) values (?, ?, ?, ?, ?, ?));

while(br.ready()){

String linha;

String[] dados = linha.split(";");

for(int i = 0; i < dados.length; i++){

stmt.setString(i+1, dados[i]);				

}

stmt.executeUpdate();

}

%>

e
upload.jsp

<%@page language=“java” import=“org.apache.commons.fileupload., java.util., java.sql., java.io.” %>
<%@include file="…/conecta/acesso.jsp"%>

<html>
<body color="#FFFFFF">

<%

// verificando se o form possui campos com dados binarios

if(FileUpload.isMultipartContent(request)){

//criando o objeto para cuidar do upload

DiskFileUpload fu = new DiskFileUpload();

// setando tamanho maximo de bytes  para upload

fu.setSizeMax(800000);

try

{

//parseando a requisição e retornando uma lista com os campos

// encontrando, tanto textos, quanto dados binarios(arquivos binarios)

List items = fu.parseRequest(request);

Iterator i = items.iterator();

FileItem fi;
//laço para pegar todos os campos do form
	while(i.hasNext())
	{
		fi = (FileItem)i.next();
		// teste para ver  se o campo em questão é o campo do formulario
		// ou um arquivo 
		if(fi.isFormField())
		{
			//pegando o campo do formulario(comentario)
			cmt = fi.getString();
		} else
		{
			// obtendo o tamanho do arquivo 
			int size = (int) fi.getSize();
			// array de byte para armazenar a foto
			byte[] arq = new byte[size];
			// carregando o arquivo no array
			upload.read(arq, 0, size);
		}	
			
	}
 } 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”);

}

%>

<h2>Arquivo inserido com sucesso</h2>

</body>
</html>

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
&#125;else&#123;
   // obtendo o tamanho do arquivo
   int size = &#40;int&#41; fi.getSize&#40;&#41;;
   // array de byte para armazenar a foto
   byte&#91;&#93; arq = new byte&#91;size&#93;;
   // carregando o arquivo no array
   upload.read&#40;arq, 0, size&#41;;

   FileOutputStream out = new FileOutputStream&#40;&quot;path para salvar&quot;&#41;;
   out.write&#40;arq&#41;;
   out.close&#40;&#41;;
&#125;
J

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

Parece que a classe DeferredFileOutputStream não está no classpath.

J

Está faltando essa classe aí!

Veja se não tem um JAR com ela por aí!

J

sim mas tipo e um jar da classe io??? ou ela possui o nome de DeferredFileOutputStream???
e so colocar o jar dela no lib???

J

O nome completo da classe é:

org.apache.commons.io.output.DeferredFileOutputStream

só pegar o jar e colocar na pasta lib

J

Bom agora aconteceu o seguinte coloquei o commons-io-1.2.jar
no path do projeto e estou usando as seguintes jsp

index:

e upload3:

estou dando upload num arkivo e esta no desktop e e um arquivo csv e ocorre a seguinte escrita na tela:

Content Type: multipart/form-data; boundary=---------------------------7d6d8d6028e Field =fichero

??? O que significa isto???

valew!!!estou quase la!!

J

Você que tá mandando imprimir isso aí!

<blockquote><%@ page import=org.apache.commons.fileupload.<em>"%>

<%<a class="mention" href="/u/page">@page</a> import="<a href="http://java.io">java.io</a>.</em>” %>

<%<a class="mention" href="/u/page">@page</a> import=“java.util.*” %>

<%

out.println("Content Type: "+request.getContentType());

boolean isMultipart=FileUpload.isMultipartContent(request);

DiskFileUpload upload=new DiskFileUpload();
List items=upload.parseRequest(request);

Iterator iter=items.iterator();

while(iter.hasNext()){
FileItem item=(FileItem)iter.next();

if(item.isFormField()){

out.println("SIZE: "+item.getSize());

File fNew= new File(application.getRealPath("/"), item.getName());

out.println(fNew.getAbsolutePath());

item.write(fNew);

}

else

out.println(Field =+item.getFieldName());

}
%>

J

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

Tente assim:

File fichero = new File&#40;fileName&#41;; out.println&#40;&quot;O nome do ficheiro é &quot; + fichero.getName&#40;&#41;&#41;; fichero = new File&#40;&quot;c&#58;\\ficherossubidos\\&quot; + fichero.getName&#40;&#41;&#41;; if&#40;!fichero.exists&#40;&#41;&#41;&#123; fichero.createNewFile&#40;&#41;; &#125; actual.write&#40;fichero&#41;;

J

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

e minha classe e assim:

<%@page language=“java” import=“java.io., org.apache.commons.fileupload., java.util.*” %>

<%

if(FileUpload.isMultipartContent(request)){

DiskFileUpload fu = new DiskFileUpload();

fu.setSizeMax(1024*512); // 512 K

try

{
fu.setSizeThreshold(4096);
 	fu.setRepositoryPath("/tmp");
 	List fileItems = fu.parseRequest(request);
 
 	if(fileItems == null)
 	{
        out.println("A lista é nula!!");
        
	 }            
 	out.print("&lt;br&gt;O numero de ficheiros é: " +  fileItems.size());
 	Iterator i = fileItems.iterator();
 	FileItem actual = null;
 	     
 	while (i.hasNext())
 	{
 		actual = (FileItem)i.next();
    	String fileName = actual.getName();
    	out.println("&lt;br&gt;Ficheiro " + fileName);	
	
		// determinando o local do ficheiro
    	File fichero = new File(fileName);
    	out.println("&lt;br&gt;O nome do ficheiro é " + fichero.getName());
		fichero = new  File("c:\\ficherossubidos\\" + fichero.getName());
		if(!fichero.exists()){
			fichero.createNewFile();
		}
		actual.write(fichero);
	}
} catch(Exception e) {
	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

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
String pasta = getServletContext&#40;&#41;.getRealPath&#40;&quot;/arquivo_csv&quot;&#41;;

fichero = new File&#40;pasta+File.separator+fichero.getName&#40;&#41;&#41;;
J

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??

formulario:

<html>
<head>
<title>Upload Do Arquivo</title>
</head>
<body color="#FFFFFF">
<h2 align=“center”>Incluir Arquivo no banco de dados</h2><br>
<form action=“upload.jsp” method=“post” enctype=“multipart/form-data”>
<table align=“center”>
<tr>
<th>
<input type=“file” name=“arquivo”>
</th>
<th>
<input type=“hidden” name=“importa” value=“importar”>
<input type=“submit” name=“importar” value=“Importar”>
</th>
</tr>
</table>
<br>
</form>
</body>
</html>

upload.jsp

???

J

Usa Javascript!

&lt;form name=&quot;formulario&quot; ... &lt;input type=&quot;file&quot; name=&quot;arquivo&quot; onChange=&quot;javascript&#58;formulario.submit&#40;&#41;&quot;&gt;

J

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

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

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

Não funciona?

O File.separator é pra adicionar a barra

J

entendi ele vale como uma barra assim “/” !!!

J

É o separador, no windows é \ no linux é /

J

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!!

Criado 26 de junho de 2006
Ultima resposta 28 de jun. de 2006
Respostas 31
Participantes 3