Jump to content
MarcioSalgado

Importar Excel para base de dados JSP

Recommended Posts

MarcioSalgado

Boa tarde estou a importar dados de um excel para uma base de dados SQL Server, e deparei-me com um problema que é o seguinte eu consigo importar o excel para a base de dados mas so se lhe der o caminho por exemplo "String fileName="C:/teste2.xls";".

O meu problema é o seguinte quando crio um index.jsp com o enctype="multipart/form-data" quando tento receber  no meu excelimport.jsp , este vem null.

e usei request.getParameter("file"); como poderam ver a baixo.

o meu objectivo sera ler o excel e enviar para uma pasta em especifico por exemplo C:/uploadDir/

citando que estou a usar as livrarias apache POI para importar excel e commons-fileupload.

 

index.jsp

<>

<%-- 
    Document   : index.jsp
    Created on : Oct 16, 2017, 5:50:32 PM
    Author     : Marcio Salgado
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
   <head>
<title>JSP</title>
</head>
<body>
<form action="excelimport.jsp" method="post" enctype="multipart/form-data" >
<center>
<h1>Upload Excel</h1>
<table>
 <tr><td>File Upload:</td><td><input type="file" name="file"></td></tr>
<tr><td></td><td><input type="submit" value="Submit"/></td></tr>
</table>
</center>
</form>
</body>
</html>

<>

excelimport,jsp

<%-- 
    Document   : index
    Created on : Oct 9, 2017, 11:11:52 AM
    Author     : Marcio Salgado
--%> 
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" import="java.sql.*" contentType="text/html; charset=ISO-8859-1"  
   pageEncoding="ISO-8859-1"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
 <%@ page import ="java.util.Date" %>
 <%@ page import ="java.io.*" %>
 <%@ page import ="java.io.FileNotFoundException" %>
 <%@ page import ="java.io.IOException" %>
 <%@ page import ="java.util.Iterator" %>
 <%@ page import ="java.util.ArrayList" %>
 <%@ page import ="java.sql.Statement" %>

 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFCell" %>
 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFRow" %>
 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFSheet" %>
 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFWorkbook" %>
 <%@ page import ="org.apache.poi.poifs.filesystem.POIFSFileSystem" %>
 <html>  
 <head>  
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
 <title>Insert title here</title>  
 </head>  
 <body>  
 <jsp:useBean id="connection" class="DB.DB_Connection" scope="page">  
   <jsp:setProperty name="connection" property="*"/>  
 </jsp:useBean>       
     
     
     
 <%!    
   
 Connection con;  
 PreparedStatement ps=null;  
 ResultSet rs=null;  
 public static ArrayList readExcelFile(String fileName)  
 {  
   /** --Define a ArrayList  
     --Holds ArrayList Of Cells  
    */  
   ArrayList cellArrayLisstHolder = new ArrayList();  
   try{  
   /** Creating Input Stream**/  
     FileInputStream myInput = new FileInputStream(fileName);  
   /** Create a POIFSFileSystem object**/  
   POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);  
   /** Create a workbook using the File System**/  
    HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);  
    /** Get the first sheet from workbook**/  
   HSSFSheet mySheet = myWorkBook.getSheetAt(0);  
   /** We now need something to iterate through the cells.**/  
    Iterator rowIter = mySheet.rowIterator();  
    while(rowIter.hasNext()){  
      HSSFRow myRow = (HSSFRow) rowIter.next();  
      Iterator cellIter = myRow.cellIterator();  
      ArrayList cellStoreArrayList=new ArrayList();  
      while(cellIter.hasNext()){  
        HSSFCell myCell = (HSSFCell) cellIter.next();  
        cellStoreArrayList.add(myCell);  
      }  
      cellArrayLisstHolder.add(cellStoreArrayList);  
    }  
   }catch (Exception e){e.printStackTrace(); }  
   return cellArrayLisstHolder;  

 }%>  
 


 
 <%  

     
 //request.setAttribute("file", request.getParameter("file"));
 //String fileName = saveFile;
 String fileName = request.getParameter("file");

 //String fileName="C:/teste2.xls";
         //"C:/teste2.xls"; // Excel File name.xls
 //Read an Excel File and Store in a ArrayList  
 ArrayList dataHolder=readExcelFile(fileName);  
 //Print the data read  
 //printCellDataToConsole(dataHolder);  
 con=connection.getConn();  
 String query="insert into teste1 values(?,?,?,?,?,?,?,?,?)";  
 ps=con.prepareStatement(query);  
 int count=0;
 ArrayList cellStoreArrayList=null;  
 //For inserting into database  
 String cmdSelect="";
 for (int i=1;i < dataHolder.size(); i++) {  
   cellStoreArrayList=(ArrayList)dataHolder.get(i);  
   
     String bank = cellStoreArrayList.get(7).toString();
     
     cmdSelect = "SELECT codigo FROM bancos WHERE n_abrev like '%"+bank+"%' ";
     Statement stmt = connection.getConn().createStatement();
     System.out.println(cmdSelect);
     ResultSet rs = stmt.executeQuery(cmdSelect);
     String idBank = "";
     
     while (rs.next()) {
        idBank = rs.getString("codigo");
            }
     ps.setString(1,((HSSFCell)cellStoreArrayList.get(0)).toString());  
     ps.setString(2,((HSSFCell)cellStoreArrayList.get(1)).toString());  
     ps.setString(3,((HSSFCell)cellStoreArrayList.get(2)).toString());
     ps.setString(4,((HSSFCell)cellStoreArrayList.get(3)).toString()); 
     ps.setString(5,((HSSFCell)cellStoreArrayList.get(4)).toString()); 
     ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString()); 
     ps.setString(7,((HSSFCell)cellStoreArrayList.get(6)).toString()); 
     ps.setString(8,idBank); 
     ps.setString(9,((HSSFCell)cellStoreArrayList.get(8)).toString()); 
     count= ps.executeUpdate();  
     System.out.print(((HSSFCell)cellStoreArrayList.get(8)).toString() + "t");  
     }  
 
    


 
 //For checking data is inserted or not?  
   if(count>0)  
     { %>  
     
     

     Foram inseridos na base de dados os seguintes dados.  
           <table>  
             <tr>  
               <th>paciente</th>  
               <th>nome</th>  
               <th>motivo</th>  
               <th>pag</th>  
               <th>cheque</th>  
               <th>conta</th>  
               <th>data</th>  
               <th>banco</th>  
               <th>data Entrega</th>  
             </tr>  
     <% for (int i=1;i < dataHolder.size(); i++) {  
   cellStoreArrayList=(ArrayList)dataHolder.get(i);%>  
   <tr>  
     <td><%=((HSSFCell)cellStoreArrayList.get(0)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(1)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(2)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(3)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(4)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(5)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(6)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(7)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(8)).toString() %></td>  
   </tr>  
     <%}  
    }  
   else  
   {%>  
   <center> Details have not been inserted!!!!!!!!!</center>  
   <%  }  %>  
     </table>  
 </body>  
 </html>

 

Share this post


Link to post
Share on other sites
M6

O upload de um ficheiro não funciona como um campo de texto num formulário. Tens de receber o ficheiro do browser e guardá-lo localmente no servidor e só depois de o teres no servidor é que o podes manipular.
Vê aqui um exemplo: https://www.tutorialspoint.com/jsp/jsp_file_uploading.htm

Já agora, "base de dados JSP" é algo que não existe e "livrarias" é um erro de tradução do inglês, o termo correto é "biblioteca" (library = biblioteca).


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
MarcioSalgado

Obrigado, já consegui resolver uma parte do problema, vou  inseri-lo aqui mas agr tenho outro problema.

<%-- 
    Document   : index
    Created on : Oct 9, 2017, 11:11:52 AM
    Author     : Marcio Salgado
--%> 
<%@page import="org.apache.commons.fileupload.FileUploadException"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" import="java.sql.*" contentType="text/html; charset=ISO-8859-1"  
   pageEncoding="ISO-8859-1"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
 <%@ page import ="java.util.Date" %>
 <%@ page import ="java.io.*" %>
 <%@ page import ="java.io.FileNotFoundException" %>
 <%@ page import ="java.io.IOException" %>
 <%@ page import ="java.util.Iterator" %>
 <%@ page import ="java.util.ArrayList" %>
 <%@ page import ="java.sql.Statement" %>

 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFCell" %>
 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFRow" %>
 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFSheet" %>
 <%@ page import ="org.apache.poi.hssf.usermodel.HSSFWorkbook" %>
 <%@ page import ="org.apache.poi.poifs.filesystem.POIFSFileSystem" %>
 <html>  
 <head>  
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
 <title>Insert title here</title>  
 </head>  
 <body>  
 <jsp:useBean id="connection" class="DB.DB_Connection" scope="page">  
   <jsp:setProperty name="connection" property="*"/>  
 </jsp:useBean>       
     

     
 <%!    
   
 Connection con;  
 PreparedStatement ps=null;  
 ResultSet rs=null;  
 public static ArrayList readExcelFile(String fileName)  
 {  
   /** --Define a ArrayList  
     --Holds ArrayList Of Cells  
    */  
   ArrayList cellArrayLisstHolder = new ArrayList();  
   try{  
   /** Creating Input Stream**/  

    FileInputStream myInput = new FileInputStream(fileName);  

   /** Create a POIFSFileSystem object**/  
   POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);  
   /** Create a workbook using the File System**/  
    HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);  
    /** Get the first sheet from workbook**/  
   HSSFSheet mySheet = myWorkBook.getSheetAt(0);  
   /** We now need something to iterate through the cells.**/  
    Iterator rowIter = mySheet.rowIterator();  
    while(rowIter.hasNext()){  
      HSSFRow myRow = (HSSFRow) rowIter.next();  
      Iterator cellIter = myRow.cellIterator();  
      ArrayList cellStoreArrayList=new ArrayList();  
      while(cellIter.hasNext()){  
        HSSFCell myCell = (HSSFCell) cellIter.next();  
        cellStoreArrayList.add(myCell);  
      }  
      cellArrayLisstHolder.add(cellStoreArrayList);  
    }  
   }catch (Exception e){e.printStackTrace(); }  
   return cellArrayLisstHolder;  

 }%>  
 

 
 <%  

String ImageFile="";
String itemName = "";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart)
{
}
else
{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try
{
items = upload.parseRequest(request);
}
catch (FileUploadException e)
{
e.getMessage();
}
 
Iterator itr = items.iterator();
while (itr.hasNext())
{
FileItem item = (FileItem) itr.next();
if (item.isFormField())
{
String name = item.getFieldName();
String value = item.getString();
if(name.equals("ImageFile"))
{
ImageFile=value;
}
 
}
else
{
try
{
itemName = item.getName();
File savedFile = new File(config.getServletContext().getRealPath("/")+"Example\\image-folder\\"+itemName);
item.write(savedFile);
}
catch (Exception e)
{
out.println("Error"+e.getMessage());
}
}
}
try
{ 
 con=connection.getConn();  
 String query1="insert into test values(?)";  
 ps=con.prepareStatement(query1);  
    
//ps.executeUpdate("insert into test(image) values ('"+itemName+"')");
 
}
catch(Exception el)
{
out.println("Inserting error"+el.getMessage());
}
}

 //request.setAttribute("file", request.getParameter("file"));
 //String fileName = saveFile;
 String fileName = itemName;

 //String fileName="C:/teste2.xls";
         //"C:/teste2.xls"; // Excel File name.xls
 //Read an Excel File and Store in a ArrayList  
 ArrayList dataHolder=readExcelFile(fileName);  
 //Print the data read  
 //printCellDataToConsole(dataHolder);  
 con=connection.getConn();  
 String query="insert into teste1 values(?,?,?,?,?,?,?,?,?)";  
 ps=con.prepareStatement(query);  
 int count=0;
 ArrayList cellStoreArrayList=null;  
 //For inserting into database  
 String cmdSelect="";
 for (int i=1;i < dataHolder.size(); i++) {  
   cellStoreArrayList=(ArrayList)dataHolder.get(i);  
   
     String bank = cellStoreArrayList.get(7).toString();
     
     cmdSelect = "SELECT codigo FROM bancos WHERE n_abrev like '%"+bank+"%' ";
     Statement stmt = connection.getConn().createStatement();
     System.out.println(cmdSelect);
     ResultSet rs = stmt.executeQuery(cmdSelect);
     String idBank = "";
     
     while (rs.next()) {
        idBank = rs.getString("codigo");
			}
     ps.setString(1,((HSSFCell)cellStoreArrayList.get(0)).toString());  
     ps.setString(2,((HSSFCell)cellStoreArrayList.get(1)).toString());  
     ps.setString(3,((HSSFCell)cellStoreArrayList.get(2)).toString());
     ps.setString(4,((HSSFCell)cellStoreArrayList.get(3)).toString()); 
     ps.setString(5,((HSSFCell)cellStoreArrayList.get(4)).toString()); 
     ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString()); 
     ps.setString(7,((HSSFCell)cellStoreArrayList.get(6)).toString()); 
     ps.setString(8,idBank); 
     ps.setString(9,((HSSFCell)cellStoreArrayList.get(8)).toString()); 
     count= ps.executeUpdate();  
     System.out.print(((HSSFCell)cellStoreArrayList.get(8)).toString() + "t");  
     }  
 
    


 
 //For checking data is inserted or not?  
   if(count>0)  
     { %>  
     
     

     Foram inseridos na base de dados os seguintes dados.  
           <table>  
             <tr>  
               <th>paciente</th>  
               <th>nome</th>  
               <th>motivo</th>  
               <th>pag</th>  
               <th>cheque</th>  
               <th>conta</th>  
               <th>data</th>  
               <th>banco</th>  
               <th>data Entrega</th>  
             </tr>  
     <% for (int i=1;i < dataHolder.size(); i++) {  
   cellStoreArrayList=(ArrayList)dataHolder.get(i);%>  
   <tr>  
     <td><%=((HSSFCell)cellStoreArrayList.get(0)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(1)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(2)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(3)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(4)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(5)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(6)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(7)).toString() %></td>  
     <td><%=((HSSFCell)cellStoreArrayList.get(8)).toString() %></td>  
   </tr>  
     <%}  
    }  
   else  
   {%>  
   <center> Details have not been inserted!!!!!!!!!</center>  
   <%  }  %>  
     </table>  
 </body>  
 </html>  

entao agr o problema e' o seguinte  FileInputStream myInput = new FileInputStream(fileName);  nao reconhece alguem me consegue ajudar? mas só nao reconhece no chrome e quando executo no microsoft edge funciona tudo menos a parte de gravar o ficheiro.

Obrigado, ainda dou rookie nisto.

Edited by MarcioSalgado

Share this post


Link to post
Share on other sites
M6

Vamos lá com calma.

O JSP é server-side, o que quer dizer que é executado no servidor e, como tal, "funciona no Edge mas não funciona no Chrome" é algo que não existe.

O que queres dizer precisamente com "FileInputStream" não reconhece? Importaste a biblioteca onde se encontra?

Para já encontro um bug de caras no código: savedFile é uma variável que contém apenas e só o nome do ficheiro quando devia conter também o caminho físico e total para o ficheiro Excel que queres ler.

  • Vote 1

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
MarcioSalgado

exacto esse é o erro mas pq que no microsoft edge ele consegue o caminho todo mas no chrome ou ie ele so me da o nome do ficheiro?

Podes me explicar como consigo neste caso encontrar o caminho?

Desde já Obrigado m8, sou rookie xD.

Share this post


Link to post
Share on other sites
M6

Aposto contigo que ele no Edge não consegue o caminho todo, funciona tal e qual como no Chrome. Já expliquei que esse código não corre no browser mas sim no servidor, quando esse código está a correr o browser está a fazer apenas uma coisa: à espera de resposta do servidor.

Para resolveres o teu problema tens, como referi, de indicar o ficheiro com o caminho total.

String fileName = config.getServletContext().getRealPath("/")+"Example\\image-folder\\"+itemName

 

  • Vote 1

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
M6

De nada.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.