JXL解析Excel表格内容到数据库

java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好;而JXL解析简单方便,对中文支持比较好。

工作中解析Excel内容上传到数据库常用JXL,而从数据库导出数据到Excel常用POI

下面是一个JXL解析Excel的一个简单案例

1.添加jxl的架包

    下载地址:jxl.zip

2.解析Excel表格内容到一个集合

 1 /**

 2      * 解析Excel表格

 3      * @param ExcelURI 表格文件的路径

 4      * @return 表格内容的集合

 5      */

 6     public static List<List<String>> readExcel(String ExcelURI){

 7         //用于存放所有的行

 8         List<List<String>> list=new ArrayList<List<String>>();

 9         Workbook book = null;

10         try {

11             // 读取现有的工作薄

12             book = Workbook.getWorkbook(new File(ExcelURI));

13             // 获取工作薄中所有的表对象

14             Sheet[] sheets = book.getSheets();

15             for (int i = 0; i < sheets.length; i++) {

16                 //获取表当前表中的总行数

17                 int rowSum=sheets[i].getRows();

18                 for (int j = 0; j < rowSum; j++) {//如果不想读取表格第一行就把j的初始值设置为1

19                     //获取当前行所有单元格对象

20                      Cell[] rowCells=sheets[i].getRow(j);

21                      //用于存放当前行中所有的单元格内容

22                      List<String> strs=new ArrayList<String>();

23                      for (int k = 0; k < rowCells.length; k++) {//如果不想读取表格第一列就把k的初始值设置为1

24                         //获取当前单元格对象

25                          CellType ct=rowCells[k].getType();

26                          String content=null;

27                          if (ct.equals(CellType.DATE)) {  

28                                 //日期 类型的处理 ,如果不处理的话,读取的时候表格中的2014-03-25 会读取成14-03-25

29                                 DateCell dc = (DateCell) rowCells[k];  

30                                 Date jxlDate = dc.getDate();  

31                                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  

32                                 sdf.setTimeZone(TimeZone.getTimeZone("GMT"));  

33                                 content=sdf.format(jxlDate);  

34                            }else{

35                                //不是日期类型的一律当做字符串处理

36                                content=rowCells[k].getContents();

37                            }

38                         strs.add(content.trim());

39                      }

40                      list.add(strs);

41                 }

42             }

43         } catch (Exception e) {

44             e.printStackTrace();

45         } finally {

46             book.close();

47         }

48         return list;

49     }

3.批量插入集合数据到数据库

 1 /**

 2      * 批量插入集合数据到数据库

 3      * @param sql  要执行的sql插入语句

 4      * @param list Excel文件内容集合

 5      * @return 插入是否成功

 6      */

 7     public boolean insertBatch(String sql,List<List<String>> list) {

 8         Connection conn=super.getConnection();

 9         PreparedStatement pstmt=null;

10         boolean mark=true;

11         try {

12             pstmt=conn.prepareStatement(sql);

13             // 关闭JDBC自动执行事务处理

14             conn.setAutoCommit(false);

15             // 一个list代表一行,每行中都有一个参数集合list

16             for (int i = 0; i < list.size(); i++) {

17                 List<String> cells=list.get(i);

18                 for (int j = 0; j <cells.size(); j++) {

19                     pstmt.setString(j+1,cells.get(j));

20                 }

21                 pstmt.addBatch();

22             }

23             pstmt.executeBatch();

24             //命令执行完了就手动提交事务

25             conn.commit();

26             //清空此 Statement 对象的当前 SQL 命令列表。

27             pstmt.clearBatch();

28         } catch (SQLException e) {

29             try {

30                 conn.rollback();

31                 mark=false;

32             } catch (SQLException e1) {

33                 e1.printStackTrace();

34             }

35         }finally{

36             super.closeAll(null, pstmt, conn);

37         }

38         return mark;

39     }

使用executeBatch能够大大提高插入的效率

 

注意点:1、注意解析表格的时候要明确表格的哪些行、哪些列是不需要放到集合中的

    2、注意表格中单元格的内容长度和数据库中字段的长度是否相符,如果数据库中字段长度比较小会出现java.sql.DataTruncation: Data truncation异常

     3、单个Excel表格中的内容不要太多,保持在5M以内

本文章出自:腾飞工作室 转载请注明出处

你可能感兴趣的:(Excel)