- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是java新手,现在我已经创建了用于读取 Excel 工作表并使用 apache poi 将其发送到数据库的代码。我已使用第一个查询成功读取第一张表并将其发送到数据库,但我不知道如何使用第二个查询和表读取第二张表。这里 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、使用 POI 读取 Excel 文件以及将行写入数据库。我建议您重新设计代码以分离这些任务。可能是一个简单的类 (Reader.java),它仅读取 excel 文件并为每个工作表生成一个 ArrayList,然后是一个具有 2 个方法的简单类 (Writer.java),每个方法都采用 ArrayList
并根据需要将它们写入数据库。这导致了更简单的自顶向下设计,更容易调试。
顺便说一下,您正在代码中创建一个数据库连接,但没有返回它。您应该为您使用的每个数据库资源(ResultSets
、Statements
和 Connections
)调用 .close()
方法。在您的应用程序中使用,或者使用一些惯用语(尝试使用资源、Spring 资源管理等)来确保这样做。
奖励轨道:当您对 Java 感觉更舒服时,请查看
http://en.wikipedia.org/wiki/Connection_pool
这将是在可能有数百或数千并发用户的 Web 应用程序中连接到数据库的首选方式。您的想法是为每次访问页面打开一个新连接,这对于学术练习来说是完全正确的,但在现实环境中会导致效率问题。也许您的应用服务器有内置的连接池机制(例如最新版本的tomcat、weblogic、websphere都有)或者您可以考虑使用apache DBCP或C3PO。
关于java - 如何读取Excel多个工作表并将Excel工作表的内容存储到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085977/
我最近一直在学习 Clojure。 Clojure 世界中是否有类似 Scala 的工作表这样的东西,我可以在其中放入任何代码并在保存后立即对其进行评估?或者也许 Clojure 有类似的解决方案?
有人可以帮我吗?我想知道如何过滤工作表中的多个选项卡(C1-C19)。这是我所做的: 我创建了一张表格,将所有回复存储在我的谷歌表单(事件注册表单)中。每个参与者将收到一个坦克编号,每个坦克编号根据其
这就是我将打开的面板显示为 float 窗口的方式。 有人可以帮我将面板作为工作表运行吗?窗口对象是mWindow。我使用的许多标准代码都已被折旧。 NSOpenPanel *openPanel =
当您仅键入 worksheets() 时,默认范围 ActiveWorkbook 或 ThisWorkbook 是什么?对于那些不了解这些区别的人来说,它们非常重要,尤其是在 Excel 2013 中
我有一个带有一些图表的 HTML 页面。我想要做的是编写一个加载 javascript 函数,它将从 excel 表中读取值,将它们存储在变量中并在 html 页面上使用它们。我的问题是是否有任何 j
我需要将参数 callFrom 传递给 SwiftUI 中的工作表。 奇怪的是,该参数在第一次调用时没有使用,但对以下调用有效。 import SwiftUI struct ContentView:
我试着 var tempSheet = wrksheets[sheetName] as Worksheet; 在哪里 wrksheets是类型表 sheetName 是“带空格的工作表名称” 如果
该函数用作“ Assets 类别分配”引擎(在参数范围内具有约束)并在数组的每一行上模拟投资组合模型。我尝试使用四种方法将数组发布到工作表上,但每种方法都失败了。 对于 Assets A、B、C、D
目前,我的 excel 文件有两张表,一张名为“English”,一张名为“French”。 我以编程方式打开我的工作簿并编辑我的英文表,没有任何问题。当我打开第二张工作表时,出现以下错误: The
我添加了一个 VBA 表单 userform和一个模块 Module1在 Excel 中打开 Microsoft VBA 编辑器 (Alt+F11)。 现在,每当我打开任何其他 Excel 时,按 A
在单个 Excel 工作簿中,我想选择各种工作表来运行 VBA 子例程。我找到了显示如何遍历选定工作表的代码,它使用“MsgBox sh.Name”;但是,当我将代码放入其中时,它只会影响选择的最后一
我想知道是否有一个函数可以在 Excel 中加载特定于 Python 的工作表,例如,如果我有 34 张工作表只加载前 25 张工作表。通过以下行,我加载了所有工作表。 xlsx=pd.ExcelFi
我有一个名为“A”、“B”、“C”等的工作表的 xlsx。我需要形成一个名称为“A”、“B”、“C”的表作为第一列,以及来自的一些数据每个工作表中与第二列相同的单元格。例如,这可能看起来像: S
我有一张用密码保护的工作表。当我使用 VBA 更改该表上的任何内容时,我会像这样取消保护: Private Sub Worksheet_Change(ByVal target As Range)
我想将 Excel 文档插入 Excel 工作表。我可以通过以下步骤手动执行此操作; 插入/文本/对象/从文件创建(勾选显示为图标)/浏览。 然后我选择文件并插入文档。 我想通过宏来做到这一点。 (录
是否可以创建 批处理文件那将执行以下操作? 重命名 Excel 文件中的单个工作表(不是 Excel 工作簿/文件本身) 将简单格式应用于 Excel 文件 - 例如,将字体和字体大小应用于整个工作簿
Private Sub CommandButton1_Click() Dim ws As Worksheet With Application.FileDialog(msoFileDialog
我想知道是否可以在不复制该工作表的情况下引用另一本工作簿中的 Excel 工作表? 情况:我有一些非常大的工作表,其中充满了各种数据,但我不想在我的工作簿中保留它们的副本,因为虽然每个工作簿都使用相同
我有这个 Python 字典,我想将这个数据写入 Excel 文件。 注意:有很多类别,每个类别有很多汽车(为简单起见,我使用了 2 个类别) data = {"Category": {"Diesel
我有一个 excel 工作簿,在工作簿中我有 2 张名为 Front Page 和 Drafting 的工作表。起草工作表引用了首页工作表中的一些值。这只是一个基本的引用 我有像这样的公式:='Fro
我是一名优秀的程序员,十分优秀!