【发布时间】:2014-10-30 09:48:33
【问题描述】:
我无法将 Excel 文件信息存储到数据库表中。任何人都可以帮助我如何将文件数据保存到具有不同数据类型(如 bigint、varchar 和 date)的表中。这里我提供了将 excel 文件逐个记录保存到数据库中的程序?
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.*;
import java.sql.*;
public class XLToDB {
public static final String INSERT_RECORDS = "INSERT INTO RECORDS" + "(SNO, ID, NAME, VALUE1, VALUE2, VALUE3, VALUE4, VALUE5) VALUES" + "(?,?,?,?,?,?,?,?)";
private static String GET_COUNT = "SELECT COUNT(*) FROM RECORDS";
public static void main(String[] args) throws Exception{
XLToDB obj = new XLToDB();
obj.insertRecords("E:/test.xlsx");
}
public void insertRecords(String filePath){
/* Create Connection objects */
Connection con = null;
PreparedStatement prepStmt = null;
java.sql.Statement stmt = null;
int count = 0;
ArrayList<String> mylist = new ArrayList<String>();
try{
con = DBHelper.getConnection();
System.out.println("Connection :: ["+con+"]");
prepStmt = con.prepareStatement(INSERT_RECORDS);
stmt = con.createStatement();
ResultSet result = stmt.executeQuery(GET_COUNT);
while(result.next()) {
int val = result.getInt(1);
System.out.println(val);
count = val+1;
}
prepStmt.setInt(1,count);
/* We should now load excel objects and loop through the worksheet data */
FileInputStream fis = new FileInputStream(new File(filePath));
/* Load workbook */
XSSFWorkbook workbook = new XSSFWorkbook (fis);
/* Load worksheet */
XSSFSheet sheet = workbook.getSheetAt(0);
// we loop through and insert data
Iterator ite = sheet.rowIterator();
while(ite.hasNext()) {
Row row = (Row) ite.next();
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING: //handle string columns
prepStmt.setString(1, cell.getStringCellValue());
break;
case Cell.CELL_TYPE_NUMERIC: //handle double data
prepStmt.setDouble(2,cell.getNumericCellValue() );
break;
}
}
//we can execute the statement before reading the next row
prepStmt.executeUpdate();
}
/* Close input stream */
fis.close();
/* Close prepared statement */
prepStmt.close();
/* COMMIT transaction */
con.commit();
/* Close connection */
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
我无法将 exell 文件信息存储到数据库表中 不是有效语句。请向我们展示您面临的错误或当前输出?
-
我得到了答案#San 谢谢
-
在您的问题下方发布答案可能对其他人有所帮助
标签: java mysql excel apache apache-poi