Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jsp、servlet或java将excel中的大型信息更新到oracle数据库_Java_Jsp - Fatal编程技术网

如何使用jsp、servlet或java将excel中的大型信息更新到oracle数据库

如何使用jsp、servlet或java将excel中的大型信息更新到oracle数据库,java,jsp,Java,Jsp,在我的项目中,我有一个excel表格,其中包含大量的分数、id、学分。。。我需要从excel文件上传到数据库。。。。iam正在使用apache poi进行读取和更新,但iam出现错误 DB\u Connection.java package DB; import java.sql.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.S

在我的项目中,我有一个excel表格,其中包含大量的分数、id、学分。。。我需要从excel文件上传到数据库。。。。iam正在使用apache poi进行读取和更新,但iam出现错误

DB\u Connection.java

      package DB;
      import java.sql.*;
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;
      public class DB_Connection 
      {
                // private String datasize;
                    private Connection con;
                 public DB_Connection()
                 {


                     try
                {
                            String conUrl="jdbc:oracle:thin:@localhost:1521:xe";
                           String userName="SYSTEM";
                            String pass="raje";
                           Class.forName("oracle.jdbc.driver.OracleDriver");
                               con=DriverManager.getConnection(conUrl,userName,pass);
                }
                catch(Exception s)
                {
                       System.out.println(s);
                }


             }
          public Connection getConn()
            {
               return con;
            }
         public void setConn(Connection con)
          {
                 this.con = con;
          }

        }
readExcel.jsp:

      <%@page  language="java" import="java.sql.*"  contentType="text/html"   pageEncoding="UTF-8" %>
      <!DOCTYPE html>

       <%@ 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 ="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=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <jsp:useBean id="connection" class="DB.DB_Connection" scope="application">
        <jsp:setProperty name="connection" property="*"/>

       </jsp:useBean> 

        <%!     
           Connection con;
           PreparedStatement ps=null;

         public static ArrayList readExcelFile(String fileName)
          {
    /** --Define a ArrayList
        --Holds ArrayList Of Cells
     */

    ArrayList cellArrayListHolder = new ArrayList();

    try{
    /** Creating Input Stream**/
        FileInputStream myInput = new FileInputStream(fileName);
       // System.out.print("myInput");


    /** 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);
          }

          cellArrayListHolder.add(cellStoreArrayList);
      }

    }
    catch (Exception e)
    {

        e.printStackTrace(); 
    }
    return cellArrayListHolder;

       }%>


     <%
        String fileName="C://Documents and Settings//raje//Desktop//JGRESULTS1.xls"; 
            ArrayList dataHolder=readExcelFile(fileName);
        //Print the data read
       //printCellDataToConsole(dataHolder);
         con= connection.getConn();
          ps=con.prepareStatement("insert into sample2 values(?,?,?,?)");
              int count=1;
         ArrayList cellStoreArrayList=null;
        //For inserting into database
         for (int i=1;i < dataHolder.size(); i++)
          {
              cellStoreArrayList=(ArrayList)dataHolder.get(i);
       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()); 
      count= ps.executeUpdate();
       System.out.print(((HSSFCell)cellStoreArrayList.get(3)).toString() + "\t");
       }
               count++;
         //For checking data is inserted or not?
           if(count>0)
        { %>
               Following details from Excel file have been inserted in student table of database
                   <table>
                       <tr>
                           <th>Student's Name</th>
                           <th>Class</th>
                           <th>external</th>
                           <th>credits</th>
                       </tr>

        <% for (int i=1;i < dataHolder.size(); i++) {
              cell StoreArrayList=(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>

            </tr>
       <%}
      }
              else
               {%>

             <%  out.print("not successfull"); 
             }    %> 
       </table>

</body>
</html>
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:3 93)
    root cause

         java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    java.util.ArrayList.RangeCheck(ArrayList.java:547)
    java.util.ArrayList.get(ArrayList.java:322)
    org.apache.jsp.readExcel_jsp._jspService(readExcel_jsp.java:175)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
Stacktrace:

      <%@page  language="java" import="java.sql.*"  contentType="text/html"   pageEncoding="UTF-8" %>
      <!DOCTYPE html>

       <%@ 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 ="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=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <jsp:useBean id="connection" class="DB.DB_Connection" scope="application">
        <jsp:setProperty name="connection" property="*"/>

       </jsp:useBean> 

        <%!     
           Connection con;
           PreparedStatement ps=null;

         public static ArrayList readExcelFile(String fileName)
          {
    /** --Define a ArrayList
        --Holds ArrayList Of Cells
     */

    ArrayList cellArrayListHolder = new ArrayList();

    try{
    /** Creating Input Stream**/
        FileInputStream myInput = new FileInputStream(fileName);
       // System.out.print("myInput");


    /** 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);
          }

          cellArrayListHolder.add(cellStoreArrayList);
      }

    }
    catch (Exception e)
    {

        e.printStackTrace(); 
    }
    return cellArrayListHolder;

       }%>


     <%
        String fileName="C://Documents and Settings//raje//Desktop//JGRESULTS1.xls"; 
            ArrayList dataHolder=readExcelFile(fileName);
        //Print the data read
       //printCellDataToConsole(dataHolder);
         con= connection.getConn();
          ps=con.prepareStatement("insert into sample2 values(?,?,?,?)");
              int count=1;
         ArrayList cellStoreArrayList=null;
        //For inserting into database
         for (int i=1;i < dataHolder.size(); i++)
          {
              cellStoreArrayList=(ArrayList)dataHolder.get(i);
       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()); 
      count= ps.executeUpdate();
       System.out.print(((HSSFCell)cellStoreArrayList.get(3)).toString() + "\t");
       }
               count++;
         //For checking data is inserted or not?
           if(count>0)
        { %>
               Following details from Excel file have been inserted in student table of database
                   <table>
                       <tr>
                           <th>Student's Name</th>
                           <th>Class</th>
                           <th>external</th>
                           <th>credits</th>
                       </tr>

        <% for (int i=1;i < dataHolder.size(); i++) {
              cell StoreArrayList=(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>

            </tr>
       <%}
      }
              else
               {%>

             <%  out.print("not successfull"); 
             }    %> 
       </table>

</body>
</html>
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:3 93)
    root cause

         java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    java.util.ArrayList.RangeCheck(ArrayList.java:547)
    java.util.ArrayList.get(ArrayList.java:322)
    org.apache.jsp.readExcel_jsp._jspService(readExcel_jsp.java:175)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

如果你真的发布了错误,你会得到更多更好的帮助

这段代码乱七八糟。它做的太多了:

  • 用于读取和分析电子表格的POI
  • 要显示的JSP
  • JDBC将继续存在
  • 我建议将其分解为单独的类,您可以开发、测试并将其放在一边

    任何人都不应该使用scriptlet编写JSP。那是一种不可信的1999年风格。最好学习JSTL并添加一些servlet

    更新:

    原因如下:

    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        java.util.ArrayList.RangeCheck(ArrayList.java:547)
    
    您假设存在一个数组元素,但JVM不同意您的看法

    以下是你做错的本质:

    List<String> values = new ArrayList<String>();
    values.add("element one"); 
    System.out.println(values.size());  // this will print 1
    System.out.println(values.get(100)); // there's only one element in the list, but you tried to access 100.  
    
    List values=new ArrayList();
    添加(“要素一”);
    System.out.println(values.size());//这将打印1
    System.out.println(values.get(100));//列表中只有一个元素,但您尝试访问100。
    

    错误!找出你的代码在哪里做了这样的事情,你就会得到它。

    正如有人指出的那样:你所做的是一种非常糟糕的做法

    但是,当前的问题很可能是,您试图从中读取单元格的行不够长,因此(注意:以数组为背景的)列表超出了范围

    为了应对这种情况,我会这样做:

       cellStoreArrayList=(ArrayList)dataHolder.get(i);
       for(int i=1;i<4;i++) { // I'd use a loop even for fixed number of iterations, I vigorously hate duplication
           if(cellStoreArrayList.size()>=i) { // check for row to be long enough --> no ArrayOutOfBounds anymore               HSSFCell cell = (HSSFCell)cellStoreArrayList.get(i-1);
               if(cell!=null) { // check for null: no NullPointerException anymore...
                   ps.setString(i,cell.toString());
               }
               else {
                   ps.setString(i,"");
               }
               //ps.setString(i,cell==null?"":cell.toString()); //this is good too, but a bit probably less readable
           }
       }
    
    cellstorearaylist=(ArrayList)dataHolder.get(i);
    
    对于(int i=1;i通过查看代码和堆栈跟踪,您似乎得到了
    IndexOutOfBoundsException
    ,因为
    cellStoreArrayList
    中的单元格行长度仅为1。我建议查看电子表格,确保您正在读取的每一行都有4列,因为此约束很难实现编码


    另一方面,如果你要硬编码数组索引,你应该用某种异常捕获机制来围绕它。

    谢谢你,我会用jstl来尝试。先生,但我不明白这个错误,以及我如何解决这个问题??