package com.hospital;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
/**
* Created by ${伊佩} on 2019/7/24.
*/
public class SqlExcel {
public static void poiread() throws IOException {
try {
//读取文件
FileInputStream inputStream = new FileInputStream("D:\\301项目正式导入模板(1).xlsx");
//调用poi导文件的XSSF
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
//获取sheet对象就是左下角的sheet工作表
XSSFSheet sheetAt = xssfWorkbook.getSheetAt(0);
//获取行 标题的行 参数是2是因为表格上有一行空白的行
XSSFRow titleRow = sheetAt.getRow(2);
//从第三行开始循环到最后一行数据
for (int i = 3; i <sheetAt.getLastRowNum() ; i++) {
//新建集合 把查到的数据放到Map中
Map<String, List<TableEntity>> mapTableEntity = new HashMap();
//外行内列 循环查当前行对应的不为空的列的个数
for (int j = 0; j < sheetAt.getRow(i).getPhysicalNumberOfCells(); j++) {
//获取标题行的所有列名 就是英文的那一行
String tabcol = titleRow.getCell(j).toString();
//获取表名
String table = tabcol.split(":")[0];
//获取字段名 有些字段有两个冒号 需要注意切割 不然会报下标越出
String column = tabcol.split(":")[tabcol.split(":").length - 1];
//实例化table实体类 column是字段名 value是对应的值
TableEntity tableEntity = new TableEntity();
//将截取之后的字段名赋值
tableEntity.setColumn(column);
//将获取到的value重新赋值 当前行当前列
tableEntity.setValue(sheetAt.getRow(i).getCell(j).toString());
System.out.println(tableEntity);
//判断当前表是否有对应的value
if(mapTableEntity.get(table)==null){
//没有的话 将table的实体类存放到list中
List tableEntityList = new ArrayList();
//将tableEntity添加到集合中
tableEntityList.add(tableEntity);
//以map中key--->table表名 value--->(key,value)的格式存入map中
mapTableEntity.put(table,tableEntityList);
}else{
//有的话,查到当前key然后再进行添加
mapTableEntity.get(table).add(tableEntity);
}
}
//对map进行遍历 获取keyset
Set<String> mapKeySet = mapTableEntity.keySet();
//迭代器循环
Iterator<String> iterator = mapKeySet.iterator();
//判断是否有下一行
while (iterator.hasNext()){
//获取下一行的值---->对应的key 也就是表名
String key = iterator.next();
//获取key对应的value放入tableEntityList中
List<TableEntity> tableEntityList = mapTableEntity.get(key);
//定义字符串拼接sql
//insert into sys_patient_info(number,weight,)values(1,59.0,)
String insertsql = "insert into "+key;
//按照以上sql格式定义字符串
String column = "(";
String value = "(";
//循环遍历tableEntityList 获取column和value
for (int j = 0; j < tableEntityList.size(); j++) {
//判断最后一条数据决定是否拼接逗号
if(j==tableEntityList.size()-1){
//获取column
column+=tableEntityList.get(j).getColumn();
//获取value
value+=tableEntityList.get(j).getValue();
}else{
column+=tableEntityList.get(j).getColumn()+",";
value+=tableEntityList.get(j).getValue()+",";
}
}
//拼接sql
insertsql+=column+")"+"values"+value+")";
System.out.println(insertsql);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
poiread();
}
}
301拼接sql批量添加
最新推荐文章于 2024-03-16 08:38:47 发布