java中,如何导入具有父子关系的Excel数据到数据库中,父子关系在Excel有体现,导入后父子关系自动生成到数据库中,向各位大侠请教?
示例EXCEL数据如下:
SW 物资设备采购 NRG00870 (NRG00870为根父类码,存入时为根父类码的Id)
PS 基础施工 NRG00870
69KV 结构施工 NRG00870.PS (PS的子数据,存入时为PS的Id)
HD 机电安装 NRG00870.PS
PSU 门窗安装 NRG00870.PS.HD (HD的子数据,存入时为HD的Id)
CVC 内部装修 NRG00870.PS.HD
这样的话,
检索出数据放到list中list_bak中,
遍历list,检索出一条,然后根据wbs_code到list_bak查找父id(遍历list_bak)
在导入的时候,按照常规存储到javabean,计算出父分类,分别插入子类。
和父子关系的数据有关系吗???poi读取数据,然后解析数据,插入到数据库不可以吗
就是数据解析,比如你读取一条数据:
PSU 门窗安装 NRG00870.PS.HD
wbs_code:PSU
wbs_name:门窗安装
父wbs_code:HD(解析"NRG00870.PS.HD"字符串,得到HD是亲节点)
按我的理解,写了段poi读取excel的代码,你参考下:
[code="java"]
public void readExcel() {
FileOutputStream fileOut = null;
try {
String rootPath = "C:/test1.xls";
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(rootPath));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getPhysicalNumberOfRows();
if (rowNum == 0) {
return;
}
for (int i = 0; i < rowNum; i++) {
HSSFRow row = sheet.getRow(i);
int cellNum = row.getLastCellNum();
String wbs_code = null;
String wbs_name = null;
String parent_wbs_id = null;
String tmp_parent_wbs_id = null;
for (int j = 0; j < cellNum; j++) {
HSSFCell cell = row.getCell(j);
if (j == 0) {
wbs_code = cell.getStringCellValue();
} else if (j == 1) {
wbs_name = cell.getStringCellValue();
} else if (j == 2) {
tmp_parent_wbs_id = cell.getStringCellValue();
int pos = tmp_parent_wbs_id.lastIndexOf(".");
if (pos < 0) {
parent_wbs_id = tmp_parent_wbs_id;
} else {
parent_wbs_id = tmp_parent_wbs_id.substring(pos + 1);
}
}
}
System.out.println(wbs_code + "," + wbs_name + "," + parent_wbs_id);
}
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[/code]
结果:
[code="java"]
SW,物资设备采购,NRG00870
PS,基础施工,NRG00870
69KV,结构施工,PS
HD,机电安装,PS
PSU,门窗安装,HD
CVC,内部装修,HD
[/code]
excel文件:
[code="java"]
SW 物资设备采购 NRG00870
PS 基础施工 NRG00870
69KV 结构施工 NRG00870.PS
HD 机电安装 NRG00870.PS
PSU 门窗安装 NRG00870.PS.HD
CVC 内部装修 NRG00870.PS.HD
[/code]
[color=red]第三行 设置其父Wbs分类码对应的ID值,这个父Wbs分类码对应的Id值在数据库中还不一定存在,事务还没提交,是不是需要临时表处理一下! [/color]
不用临时表,事务要放在for循环的最外层,比如你检索了10条记录,这10条记录全部插入数据库成功后,再提交事务。
我感觉和顺序没有关系,有事务控制,上面6条记录要么全部插入成功,要么全部失败,对数据库没有影响。
好像明白你的意思了,父ID在excel没有给出,那么插入的时候,你在哪取?
[code="java"]父ID是根据excel给定父wbs_code值来获得的[/code]
这属于你业务的问题啊,怎么根据父wbs_code取得父ID,你不知道? :oops: