下图为java导入数据库中表的结构,其中id为自增,导入excel时excel中的数据不需要写id列,数据库会自动生成只需要写后面相对应的数据。
下表为excel导入数据库时的结构,列必须与数据库相对应。
- 下面代码是将excel中的数据导入数据库
public static void importData() throws Exception {
//定义导出文件的地址
String filePath="D:\\e.xlsx";
//导入数据库的sql
String sql="insert into tablehl values(?,?,?,?,?)";
PreparedStatement pstmt = DBUtils.getPstmt(sql);
//获取workbook引用
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(filePath));
//得到表单对象 参数为表单的名字
XSSFSheet sheet = workbook.getSheet("tablehl");
//获得excel中有值的行数
int rows = sheet.getPhysicalNumberOfRows();
//遍历行,从0开始
for(int i=0;i<rows;i++){
//获取每一个行的数据
XSSFRow row = sheet.getRow(i);
if(row!=null){
//统计excel文件中有值的列的数目。
int cells = row.getPhysicalNumberOfCells();
//统计excel文件中最后一列的列数
Integer lastCellNum = (int) row.getLastCellNum();
Model model=new Model();
//将excel中的每一行数据组装成一个字符串,其中用逗号隔开
String str="";
for(int j=0;j<lastCellNum;j++){
//获取每个单元格的对象
XSSFCell cell = row.getCell(j);
str+=cell+",";
}
//再将其分开
String[] split = str.split("\\,");
pstmt.setString(1,null);
pstmt.setString(2, split[0]);
pstmt.setString(3, split[1]);
pstmt.setString(4, split[2]);
pstmt.setString(5, split[3]);
}//if(row!=null)结束
//批量插入
pstmt.addBatch();
//每100插入一次 防止数据量过大
if(i==100){
pstmt.executeBatch();
}
}
pstmt.executeBatch();
}