zoukankan      html  css  js  c++  java
  • 利用dorado实现excel数据上传到mysql数据库

        实现过程中遇到巨多的bug, 初步估计至少20个异常,但是最后还是实现了. 具体的过程不细说了, 把大概需要注意的几点说一下

    1    基本步骤是:   java代码读取excel表中的数据,  dorado中配置mysql的连接,   设计对应excel的表,  设计映射表,  

      其中我遇到的一些坑:    mysql数据库不支持序列化, 而联合主键又得有主键, 至今不知道怎么处理联合主键, 我是直接添加了一个id作为主键

         保存的时候用了hibernate的save接口, 但是无法保存到数据库中, 原因有几点:   配置文件没有<prop key="hibernate.connection.autocommit">true</prop>

      或者是没有写@Transaction注解, 就没提交

       配置mysql的时候,一定要仔细, 还要导入相应的jar包, 一般classNotFound就是jar包没有导入的问题

      数据库设计的时候,  字段不能有关键字 如 desc

      导入mysql方言的时候hibernate.dialect=org.hibernate.dialect.MySQL5Dialect其中的y是小写, 写成大写就凉了

    2  我的基本代码如下

    实体类,  excel表格中除了没有id, 别的字段都有,  我开始以name和datee作为主键, 走了很多弯路

    @Entity
    @Table(name="EXDATA")
    public class ExcelEntity {
    //private static final long serialVersionUID = 6076304611179489259L;

    @Id
    @Column(name="id")
    private int id;
    @Column(name="name")
    private String name;
    @Column(name = "dept")
    private String dept;
    @Column(name="datee")
    private String datee;
    @Column(name = "result")
    private String result;
    @Column(name = "lateTime")
    private String lateTime;
    @Column(name = "beforeTime")
    private String beforeTime;
    @Column(name = "goWork")
    private String goWork;
    @Column(name = "afterWork")
    private String afterWork;
    @Column(name = "descc")
    private String descc;
    @Column(name = "sign")
    private String sign;
    @Column(name = "deptLeader")
    private String deptLeader;
    @Column(name = "govLeader")
    private String govLeader;

    继承自hibernateD的dao类

    @Repository
    public class ExcelDao extends HibernateDao<ExcelEntity,Integer>{

    }

    实现类

    @Component
    public class ExcelDemo {
    // 注入dao对象
    @Resource
    public ExcelDao excelDao;

    @Transactional
    @Expose
    public void getAllByExcel(){

    List<ExcelEntity> list=new ArrayList<ExcelEntity>();

    try{

    // 获取excel表格对象
    Workbook rwb=Workbook.getWorkbook(new File("E:\创新产品事业部12月未正常打卡记录.xls"));
    Sheet rs=rwb.getSheet(0);
    int clos=rs.getColumns();//得到所有的列
    int rows=rs.getRows();//得到所有的行
    int index=0;
    for (int i =2; i < rows; i++) {//除去表头,应该从第三行开始
    for (int j = 0; j < clos; j++) {
    //第一个是列数,第二个是行数
    String name=rs.getCell(j++, i).getContents();
    String dept=rs.getCell(j++, i).getContents();
    String datee=rs.getCell(j++, i).getContents();
    String result=rs.getCell(j++, i).getContents();
    String lateTime=rs.getCell(j++, i).getContents();
    String beforeTime=rs.getCell(j++, i).getContents();
    String goWork=rs.getCell(j++, i).getContents();
    String afterWork=rs.getCell(j++, i).getContents();
    String descc=rs.getCell(j++, i).getContents();
    String sign=rs.getCell(j++, i).getContents();
    String deptLeader=rs.getCell(j++, i).getContents();
    String govLeader=rs.getCell(j++, i).getContents();
    // 将一行数据封装到实体中

    ExcelEntity entity=new ExcelEntity();
    entity.setAfterWork(afterWork);
    entity.setBeforeTime(beforeTime);
    entity.setDept(dept);
    entity.setDeptLeader(deptLeader);
    entity.setdescc(descc);
    entity.setGovLeader(govLeader);
    entity.setGoWork(goWork);
    entity.setLateTime(lateTime);
    entity.setResult(result);
    entity.setSign(sign);
    entity.setName(name);
    entity.setDatee(datee);

    entity.setId(index++);

    list.add(entity);
    }
    }

    }catch(Exception e){
    e.printStackTrace();
    }


    //保存操作
    for (ExcelEntity excelEntity : list) {


    System.out.println(excelEntity);

    excelDao.save(excelEntity);
    System.out.println("save执行完毕");

    }



    }
    }

      最后是一些配置文件, 虽然用的少,但是真的重要  app-context.xml,  还有一个配置文件, 是configure.propertiesl就是存放一些属性供app-context的变量使用,比较简单

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:component-scan base-package="sample" />
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url"
    value="jdbc:mysql:${jdbc.url}?useUnicode=true&amp;characterEncoding=utf8" />
    <property name="username" value="${jdbc.userName}" />
    <property name="password" value="${jdbc.password}" />
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="entityInterceptor" ref="dorado.unByteCodeProxyInterceptor" />
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    <prop key="hibernate.show_sql">${hibernate.showSql}</prop>
    <prop key="hibernate.format_sql">${hibernate.formatSql}</prop>
    <prop key="hibernate.connection.autocommit">true</prop>
    </props>
    </property>
    <property name="packagesToScan">
    <list>
    <value>com/bstek/dorado/sample/entity</value>
    </list>
    </property>
    </bean>
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
    <context:component-scan base-package="com.bstek.dorado.sample" />
    </beans>

    随便附上excel导出的代码

    @Expose
    public void getAllBySql(){
    /**
    * 从数据库读取数据
    */

    List<ExcelEntity> list=new ArrayList<ExcelEntity>();
    list=excelDao.getAll();

    // 将数据保存到excel中


    //开始写入excel,创建模型文件头
    String[] titleA = {"id","姓名","部门","日期","考勤结果","迟到时间","早退时间","上班","下班","说明","签字","领导","老板"};
    //导入的excel的位置
    File file = new File("e:/TestFile.xls");
    if(file.exists()){
    //如果文件存在就删除
    file.delete();
    }
    try{

    file.createNewFile();
    //创建工作簿
    WritableWorkbook workbookA = Workbook.createWorkbook(file);

    WritableSheet sheetA = workbookA.createSheet("sheet1", 0);
    Label labelA = null;
    //设置列名
    for (int i = 0; i < titleA.length; i++) {
    labelA = new Label(i,0,titleA[i]);//第0行
    sheetA.addCell(labelA);
    }
    // 设置单元格属性
    WritableCellFormat wc = new WritableCellFormat();
    // 设置居中
    wc.setAlignment(Alignment.CENTRE);
    // 设置边框线
    wc.setBorder(Border.ALL, BorderLineStyle.THIN);

    //插入数据
    int i=1;//从第二行开始

    for (ExcelEntity excelEntity : list) {
    int j=0;//从第1列开始

    Integer id=excelEntity.getId();

    //向特定格子写入数据
    Label label = new Label(j++, i,id.toString(),wc);
    sheetA.addCell(label);
    Label label01 = new Label(j++, i,excelEntity.getName(),wc);
    sheetA.addCell(label01);
    Label label02 = new Label(j++, i,excelEntity.getDept(),wc);
    sheetA.addCell(label02);
    Label label03 = new Label(j++, i,excelEntity.getDatee(),wc);
    sheetA.addCell(label03);
    Label label04 = new Label(j++, i,excelEntity.getResult(),wc);
    sheetA.addCell(label04);
    Label label05 = new Label(j++, i,excelEntity.getLateTime(),wc);
    sheetA.addCell(label05);
    Label label06 = new Label(j++, i,excelEntity.getBeforeTime(),wc);
    sheetA.addCell(label06);
    Label label07 = new Label(j++, i,excelEntity.getGoWork(),wc);
    sheetA.addCell(label07);
    Label label09 = new Label(j++, i,excelEntity.getAfterWork(),wc);
    sheetA.addCell(label09);
    Label label08 = new Label(j++, i,excelEntity.getdescc(),wc);
    sheetA.addCell(label08);

    i++;
    }
    workbookA.write();
    workbookA.close();


    } catch (Exception e) {
    e.printStackTrace();
    System.out.println("文件写入失败,报异常...");
    }

  • 相关阅读:
    HDU 5608
    win10 UWP 九幽数据分析
    win10 UWP 九幽数据分析
    win10 UWP 九幽数据分析
    博客发在win10.me
    博客发在win10.me
    博客发在win10.me
    win10 UWP 圆形等待
    win10 UWP 圆形等待
    win10 UWP 圆形等待
  • 原文地址:https://www.cnblogs.com/zxq-Study-Java/p/10254611.html
Copyright © 2011-2022 走看看