展开全部
如果 Excel 文件在文件系统中,则输出 Agent 模块是主程序。它首先获取文e68a8462616964757a686964616f31333337613163件系统中的 Excel 文件,然后可以启动多个线程去处理一批 Excel 文件。获取 Excel 文件的类型和版本号,根据 Excel 类型和版本号去获取用以描述 Excel 和关系数据库的映射元数据,就是上节我们讲述的内容。进而解析元数据构建元数据的内存模型。并且采用缓存机制,同一种类型,并且是同一种版本的 Excel 文件应用内存中已经构建好的元数据模型来解析,不必每次都去重新获取元数据。这样可以显著的提高性能。
如果 Excel 文件是存放在 Domino 服务器上的,则需要一个 Domino Agent 程序主动调用输出 Agent 所提供的接口,批量的转换用解析程序从 domino 数据文档中解析出来的 excel 文件。(关于 Domino Agent 以及如何开发一个 Agent 程序,请见参考文献 2)
按照映射的元数据模型,应用 HSSF/XSSF 解析 Excel 的相应单元格、列,进而构造 SQL 语句(采用 JDBC 方式的模式)。在一个事务中提交该 Excel 文件所要执行的所有 SQL 语句, 保证一个 Excel 文件写入或者完全成功,或者出错回滚,并报告错误信息。如清单 2 所示。
//Insert into database
List sqlList = new ArrayList();
CADataStore dataStore = new CADataStore();
if(tableSQLsMap!= null && tableSQLsMap.size()!= 0){
Iterator itsql = tableSQLsMap.keySet().iterator();
while(itsql.hasNext()){
String tableName = itsql.next();
List theList = tableSQLsMap.get(tableName);
sqlList.addAll(theList);
}
dataStore.write(sqlList); // 一个事务中完成所有 sql 语句的插入操作,事务是以一个 excel
// 文件为单位的,可涉及到若干个表
}
}