有张表T包含100多列,我想将与之对应的固定格式的excel表(也100多列,每列都与T的字段对应,顺序完全一致)的数据插入到这张表T中,用hibernate tool按照表T自动生成了映射文件和pojo类。
刚接触hibernate如果按书上例子的方法插入的话,就需要给100多个属性分别赋值工作量巨大(类似T的这种表还有10多张),如果不考虑分表的情况下,还有什么简便方法插入吗?比如从Excel获得一个row,然后直接插入一行?网上查了好久也没有找到方法,求帮忙:(

解决方案 »

  1.   

    JXL(Java Excel API)是一个用来动态读写Excel文件的开源框架,利用它可以在任何支持Java的操作系统上动态读写Excel文件。
      

  2.   

    首先多谢楼上各位,我现在的问题不是读取Excel而是从Excel读取一行数据后(Row)插入到相应数据库表的问题~~~。
    读取Excel已经用poi实现了,只是插入方法过于繁杂(需要给pojo的上百属性个分别赋值然后save),想问有没有更加方便的办法,hibernate可以执行SQL中的insert 语句吗?用哪个方法执行?
      

  3.   

    是的,这些表都是业务部门从其他系统下载下来的,每一张Excel表都包含100多个列,这样的表少说得有10多张
      

  4.   

    同意楼上的,去找一个JXL,然后来操作。呵呵,本人昨天刚用过,感觉还不错……
    package com.bean.util;import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;/**
     * 读取excel
     * @author Administrator
     *
     */
    public class ReadExcel {
    @SuppressWarnings("unchecked")
    public static List readExcel(String excelFileName) throws BiffException,
    IOException { // 创建一个list 用来存储读取的内容
    List list = new ArrayList();
    Workbook rwb = null;
    Cell cell = null; // 创建输入流
    InputStream stream = new FileInputStream(excelFileName); // 获取Excel文件对象
    rwb = Workbook.getWorkbook(stream); // 获取文件的指定工作表 默认的第一个
    Sheet sheet = rwb.getSheet(0); // 行数(表头的目录不需要,从2开始)
    for (int i = 2; i < sheet.getRows(); i++) { // 创建一个数组 用来存储每一列的值
    String[] str = new String[sheet.getColumns()]; // 列数
    for (int j = 0; j < sheet.getColumns(); j++) { // 获取第i行,第j列的值
    cell = sheet.getCell(j, i);
    str[j] = cell.getContents(); }
    // 把刚获取的列存入list
    list.add(str);
    } // 返回值集合
    return list;
    }
    }
      

  5.   

    自己顶下~~~~~~~~~可能是我表述的不清楚,还是没能解决问题,我只是想弄明白通过hibernate怎样更简单的处理这样的问题,我只是为了学习,具体需求早已经jxl+jdbc搞定了
      

  6.   

    你的意思就是不想给那么多字段赋值撒.那你用纯SQL插入就行了撒.
      

  7.   

    hibernate可以直接执行sql语句啊
    没有必要单独封装成具体的类,如果是项目需要,可以使用JDBC,如果是练习,从某种角度上说,你直接使用hibernate执行sql,但是这就和JDBC一样了,如果非要封装的话,这种赋值也是必须的啊……
      

  8.   


    String sql = "insert into SHOP_MALL_ACCOUNT_MAP_T (MALL_NO,ACCOUNT) values ('"
    + mallNo + "','" + userId + "')";
    SQLQuery query = getSession().createSQLQuery(sql);
    query.executeUpdate();