Как читать несколько листов Excel для хранения содержимого листа excel в базе данных

Я новичок в java. Теперь я создал код для чтения листа excel и отправки его в базу данных с помощью apache poi. Я успешно прочитал 1-й лист с 1-м запросом и отправил его в базу данных, но я не знаю, как читать 2-й лист со вторым запросом и таблицей. Здесь 2 листа имеют 2 разных запроса, как упоминать это в подготовленном состоянии. Или есть другой способ сделать это. Пожалуйста, помогите мне с этой проблемой. Код

<html> <head> <meta http-equiv="Content-Type" content="text/html"> <title>Excel</title> </head> <body> <FORM ENCTYPE="multipart/form-data" ACTION="Excel.jsp" METHOD=POST> <br><br><br> <center><table border="2" > <tr><center><td colspan="2"><p align="center"><B>UPLOAD THE FILE</B><center></td></tr> <tr><td><b>Choose the file To Upload:</b> </td> <td><INPUT NAME="file" TYPE="file" accept=".csv, application/vnd.openxmlformats- officedocument.spreadsheetml.sheet, application/vnd.ms-excel"></td></tr> <tr><td colspan="2"> <p align="right"><INPUT TYPE="submit" VALUE="Send File" ></p></td></tr> </center> </FORM> </body> <jsp:useBean id="connection" class="DB.DB_Connection" scope="page"> <jsp:setProperty name="connection" property="*"/> </jsp:useBean> </html> <%! Connection con; PreparedStatement ps=null; PreparedStatement ps2=null; public static ArrayList readExcelFile(String fileName) throws SQLException { /** --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); HSSFSheet mySheet2 = myWorkBook.getSheetAt(1); /** We now need something to iterate through the cells.**/ Iterator rowIter = mySheet.rowIterator(); Iterator rowIter1 = mySheet2.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(); HSSFCell cell; short i= 1; do { cell = myRow.getCell(i);// Start from first column if (cell == null) { break; } if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { // Plain String Cell. System.out.println("The Cell is a String with value : " + cell.getStringCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // Excel stores the Date as a Numeric Contents. POI provides // a Date utility to check // if a particular cell is formatted as a date. if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = HSSFDateUtil.getJavaDate((double) cell .getNumericCellValue()); SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy"); System.out.println("The cell is a Date : " + df.format(date)); } else { // treat the cell as 'double' number System.out.println("The cell is a number : " + cell.getNumericCellValue()); } } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) { // Some of the cells will be rendered blank when cells in // Excel are merged... one such cell System.out .println("A Blank Cell Encountered.... any merging happened???"); } else { System.out.println("The cell is nothing we're interested in ..."); } i++; // increment cell counter!!! } while (cell != null); cellStoreArrayList.add(myCell); } cellArrayLisstHolder.add(cellStoreArrayList); } while(rowIter1.hasNext()){ HSSFRow myRow1 = (HSSFRow) rowIter.next(); Iterator cellIter1 = myRow1.cellIterator(); ArrayList cellStoreArrayList1=new ArrayList(); while(cellIter1.hasNext()){ HSSFCell myCell1 = (HSSFCell) cellIter1.next(); HSSFCell cell1; short i= 1; do { cell1 = myRow1.getCell(i); // Start from first column if (cell1 == null) { break; } if (cell1.getCellType() == HSSFCell.CELL_TYPE_STRING) { // Plain String Cell. System.out.println("The Cell is a String with value : " + cell1.getStringCellValue()); } else if (cell1.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // Excel stores the Date as a Numeric Contents. POI provides // a Date utility to check // if a particular cell is formatted as a date. if (HSSFDateUtil.isCellDateFormatted(cell1)) { Date date = HSSFDateUtil.getJavaDate((double) cell1 .getNumericCellValue()); SimpleDateFormat df = new SimpleDateFormat("mm/dd/yyyy"); System.out.println("The cell is a Date : " + df.format(date)); } else { // treat the cell as 'double' number System.out.println("The cell is a number : " + cell1.getNumericCellValue()); } } else if (cell1.getCellType() == HSSFCell.CELL_TYPE_BLANK) { // Some of the cells will be rendered blank when cells in // Excel are merged... one such cell System.out .println("A Blank Cell Encountered.... any merging happened???"); } else { System.out.println("The cell is nothing we're interested in ..."); } i++; // increment cell counter!!! } while (cell1 != null); cellStoreArrayList1.add(myCell1); } cellArrayLisstHolder.add(cellStoreArrayList1); } }catch (Exception e){e.printStackTrace(); } return cellArrayLisstHolder; } %> <% File f = new File("DeptHosp.xls"); System.out.println(f.getAbsolutePath()); File file = new File("."); for(String fileNames : file.list()) System.out.println(fileNames); String fileName="D://PROJECT//SOFTWARES//eclipse_Juno//eclipse//DeptHosp.xls"; System.out.println(" path found"); ArrayList dataHolder=readExcelFile(fileName); //Print the data read //printCellDataToConsole(dataHolder); con=connection.getConn(); System.out.println("Inserting the details"); String query="insert into departmentmaster(Dept_id,Dept_Groupid,Dept_Kid,Dept_Groupkid,Dept_Group,Dept_Name,Dept_type,Dept_HospitalId,Dept_datecreated,Dept_datelastrefreshed)values(?,?,?,?,?,?,?,?,?,?)"; String query1="insert into hospitalmaster(hospital_group,hospital_name)values(?,?)"; ps=con.prepareStatement(query); ps2=con.prepareStatement(query1); System.out.println("Database"); int count=0; ArrayList cellStoreArrayList=null; Date datevalue=null; //For inserting into database for (int i=1;i < dataHolder.size(); i++) { cellStoreArrayList=(ArrayList)dataHolder.get(i); ps.setString(1,((HSSFCell)cellStoreArrayList.get(1)).getStringCellValue()); ps.setString(2,((HSSFCell)cellStoreArrayList.get(1)).getStringCellValue()); ps.setString(3,((HSSFCell)cellStoreArrayList.get(2)).getStringCellValue()); ps.setString(4,((HSSFCell)cellStoreArrayList.get(3)).getStringCellValue()); ps.setString(5,((HSSFCell)cellStoreArrayList.get(4)).getStringCellValue()); ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).getStringCellValue()); ps.setString(7,((HSSFCell)cellStoreArrayList.get(6)).getStringCellValue()); ps.setString(8,((HSSFCell)cellStoreArrayList.get(7)).getStringCellValue()); ps.setString(9,((HSSFCell)cellStoreArrayList.get(8)).getStringCellValue()); ps.setString(10,((HSSFCell)cellStoreArrayList.get(9)).getStringCellValue()); count= ps.executeUpdate(); ps2.setString(1,((HSSFCell)cellStoreArrayList.get(1)).getStringCellValue()); ps2.setString(2,((HSSFCell)cellStoreArrayList.get(1)).getStringCellValue()); count= ps2.executeUpdate(); } </body> </html> 

Возможно, вы смешиваете вещи. Вы уже решили, как представить JSP, прочитать файл Excel с POI и записать строки в базу данных. Я предлагаю вам перепроектировать ваш код, чтобы разделить эти задачи. Может быть, простой класс (Reader.java), который только считывает файл excel и создает ArrayList для каждого листа, а затем простой класс (Writer.java) с двумя методами, каждый из которых принимает ArrayList и записывает их в базу данных как необходимо. Это приводит к более простому дизайну сверху вниз, который будет легче отлаживать.

Кстати, вы создаете соединение с базой данных в своем коде и не возвращаете его. Вы должны вызвать метод .close() для каждого ресурса базы данных ( ResultSets , Statements and Connections ), который вы используете в своем приложении, или использовать некоторую идиому (попробуйте с ресурсами, управление ресурсами Spring, независимо от того, что), которая обязательно сделает это.

Бонус-трек: когда вы чувствуете себя более комфортно с java, взгляните на

http://en.wikipedia.org/wiki/Connection_pool

Это было бы предпочтительным способом подключения к базе данных в веб-приложении с потенциальными сотнями или тысячами одновременных пользователей. Ваша идея, открывающая новое соединение для каждого доступа к вашей странице, что совершенно правильно для академических упражнений, приведет к проблемам с эффективностью в реальной среде. Возможно, ваш сервер приложений имеет встроенный механизм пула соединений (последняя версия tomcat, weblogic, websphere имеет их, например), или, может быть, вы можете использовать apache DBCP или C3PO.

  • Объединение таблиц из разных баз данных через JDBC
  • Подключение JDBC-ODBC к Excel
  • доступ к excel как базе данных с помощью jdbc
  • Как выполнять операции чтения и записи в файле excel на 20 ГБ на сервере?
  • Как я могу подключить ORACLE из EXCEL с помощью JDBC?
  • Java JDBC-ODBC не может загрузить драйвер для Excel
  • OpenCsv | SQL | Записывает только заголовок, а не содержимое таблицы
  • Итерирование столбцов для поиска столбца с последним отличным от нуля значением
  • Вставка данных в MySQL из Excel Программа JDBC - POI
  • Скрипт Groovy висит
  • JDBC - Где найти драйвер JDBC типа 4 для чтения файлов excel (.xml) в Linux (или даже в Windows)
  • Interesting Posts

    Запустите приложение WPF от excel, как вернуть фокус в excel

    Как изменить имена столбцов из VBA

    Код VBA работает ужасно медленно

    Использование множественных симпатий в инструкции VBA

    Как добавить несколько значений в одну ячейку

    Переименуйте лист excel, созданный на ралли

    создать Именованный диапазон Excel, который будет работать до тех пор, пока не будет выполнено условие

    VBA – Событие триггера с решателем excel

    Excel VBA Clear Formula и сохранить перезаписанную стоимость

    Как объединить два подкаталога с Private Sub Worksheet_Change на листе, которые имеют разные триггеры

    Использование формулы для ввода таблицы Excel

    Как вывести знак евро с таблицей :: WriteExcel из столбца nvarchar сервера MSSQL

    Excel VBA – создание Treeview из набора записей

    Как сопоставление данных из разных таблиц равно одному из нескольких значений в ms excel

    С Ace-двигателем не удается прочитать смешанный режим Excel Columns

    Давайте будем гением компьютера.