【jsp+mysql】(07版Excel导入mysl数据库)

Excel数据导入到mysql数据库

一 技术说明

1:Excel版本为2007版

2:使用的是poi进行解析

3: MySQL版本5.7.17

二 准备工作

1:文件获取

链接:https://pan.baidu.com/s/1WQHiQIkGSwJIL8-TZTTC1w 密码:hbih

链接:https://pan.baidu.com/s/11iE0A7JtUTm1CaFathDvdQ 密码:z8gz

链接:https://pan.baidu.com/s/1CAJi_XnuKL6Z7rpaQiix3g 密码:x91s

这里写图片描述

2:poi解析相关说明

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls

XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx

HWPF-提供读写Microsoft Word DOC格式档案的功能.

HSLF- 供读写Microsoft PowerPoint格式档案的功能。

HDGF-提供读Microsoft Visio格式档案的功能。
HPBF-提供读Microsoft Publisher格式档案的功能。

三 思路分析

1:第一步

添加点击按钮,这里添加按钮是实现qjl_list.jsp的主页面中跳转到上传文件到服务器中的功能页面
这里写图片描述
这里写图片描述

2:第二步

创建excel表结构以及创建相应数据库表单

1:excel表结构(模板)

这里写图片描述

2:对应的数据库

这里写图片描述

3:第三步

解析excel文件,在第二步已经将excel模板创建好,现在根据自己创建的模板开始进行解析excel表中内容。

解析相关代码如下所示:

        // 开始解析
        //  获取文件输入流
        FileInputStream ExcelFileToRead = new FileInputStream(in_filedir);//读取指定位置中的文件,就是刚才保存在指定文件夹中的上传文件
        System.out.println("\n文件位置:"+ExcelFileToRead);


        XSSFSheet excel_Sheet=null;   //工作簿对象

        XSSFRow excel_Row=null;       //行对象
        XSSFCell excel_Cell=null;     //单元格对象

        //  获取读取的实例
         XSSFWorkbook workbook = new XSSFWorkbook(ExcelFileToRead);//读取指定文件夹下的excel文件(//工作簿对象)
         XSSFSheet xssfSheet = workbook.getSheet("Sheet1"); //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了    

       int i1=xssfSheet.getLastRowNum();//读取到一共的行数
       System.out.println("\n一共 " + i1 + " 行");
       if(3>=i1)
           { 
            // 有效行数可变长
            // 最少3行以上,标准为:行0是器件说明行,行1是各个字段名,行3:数据行从行3开始(倒数最后一行为统计行,以上行为连续行,中间没有空行,也没有空列)
            // 即数据区不包括行0、1、2、最后一行。

            throw new Exception("『back::_self』上载的EXCEL表格【"+in_filename+"】中监测数据填报区域数据格式错误!");
           }

       excel_Sheet=workbook.getSheetAt(0); //读取下标为0的表

       if(null==excel_Sheet)
       {  
       System.out.println("工作表0【默认名为 Sheet1 】为空"); //使用工作表之前要检查行对象是否为null,否则会报空指针异常 
       throw new Exception("『back::_self』错误:工作表为空!");
       }


       // err_code="0x01_B";
       excel_Row=excel_Sheet.getRow(0);
       excel_Cell=excel_Row.getCell((short)0);
       System.out.println("第一个单元是:" + excel_Cell.getStringCellValue());// 主键

       // 测试
       System.out.println("\n注意1:行没有内容即为空,但被合并的没有内容的行如果合并后合并单元格有内容,则此无内容的被合并的行不为空而是为空字符串");
       System.out.println("\n注意2:单元格没有内容即为空,但被合并的没有内容的单元格如果合并后合并单元格有内容,则此无内容的被合并的单元格不为空而是为空字符串");
       System.out.println("\n工作表有效的开始行号="+excel_Sheet.getFirstRowNum());
       System.out.println("\n工作表有效的结束行号="+excel_Sheet.getLastRowNum());
       System.out.println("\n工作表有效物理行数="+excel_Sheet.getPhysicalNumberOfRows()); //注意此有效物理行数不一定是连续的行




       // 遍历行和列(从获取的遍历)i2=excel_Sheet.getFirstRowNum();
       // =excel_Sheet.getLastRowNum(); //最后一行的行号(行号从0开始编)
       // 创建集合---将值存入到集合中以此来插入
     String[] All = new String[13]; // 一共13个单元格
     int i = xssfSheet.getLastRowNum();//总共的行数
     XSSFCell f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12 = null; // 初始化单元格

     String[] F0 = new String[i];// id
     String[] F1 = new String[i];// 器件类名称
     String[] F2 = new String[i];// 产品序列号
     String[] F3 = new String[i];// 规格型号
     String[] F4 = new String[i];// 功能描述
     String[] F5 = new String[i];// 参考寿命
     String[] F6 = new String[i];// 实物图片存放位置
     String[] F7 = new String[i];// 器件类型
     String[] F8 = new String[i];// 器件属性
     String[] F9 = new String[i];// 生产厂家
     String[] F10 = new String[i];// 购买时间 
     String[] F11 = new String[i];// 购买价格
     String[] F12 = new String[i];// 备注

     // 遍历总的行数:从有效行(数据行开始遍历)
    for (int j = 2;j<=i;j++)
    {   
        XSSFRow row = xssfSheet.getRow(j);
        if (row == null){break;}

            // 获取单元格中的数据(对应单元格中的所以行数中的数据)
            f0 = row.getCell(0);
            f1 = row.getCell(1);
            f2 = row.getCell(2);
            f3 = row.getCell(3);
            f4 = row.getCell(4);
            f5 = row.getCell(5);
            f6 = row.getCell(6);
            f7 = row.getCell(7);
            f8 = row.getCell(8);
            f9 = row.getCell(9);
            f10 = row.getCell(10);
            f11 = row.getCell(11);
            f12 = row.getCell(12);  
            System.out.println("f0="+f0);   

            // 进行强制转变   
            F0[j-2]=f0.toString();
            F1[j-2]=f1.toString();
            F2[j-2]=f2.toString();
            F3[j-2]=f3.toString();
            F4[j-2]=f4.toString();
            F5[j-2]=f5.toString();
            F6[j-2]=f6.toString();
            F7[j-2]=f7.toString();
            F8[j-2]=f8.toString();
            F9[j-2]=f9.toString();
            F10[j-2]=f10.toString();
            F11[j-2]=f11.toString();
            F12[j-2]=f12.toString();
    }


    // 测试--------------------这里只是针对获得单元格对于的数据进行一个检测
    // 遍历单元格对应集合的数据
    for(int x = 0 ;x<=F0.length-2;x++){
        System.out.println("测试第一列F0:"+F0[x]);
    }
    //workbook.close();

4:第四步

解析完excel表数据之后,就开始连接数据库进行插入excel表中的数据到表单中。

连接数据库相关代码:


    //连接数据库并写入数据
    boolean ok=false; //成功操作则此标志转为true  
    Connection my_con=null;
    try
    {

    String my_dbdriver=com_station_datebase_driver; //MYSQL 5.0 用的JDBC驱动
    String my_url=com_station_datebase_url; //MYSQL数据库名为dqz_mysql_test
    String my_username=com_station_datebase_user;  //数据库管理用户
    String my_password=com_station_datebase_password; //数据库管理密码
    Class.forName(my_dbdriver); //装载驱动程序
    my_con=DriverManager.getConnection(my_url,my_username,my_password); //连接数据库


    Statement my_stmt=my_con.createStatement();//建立远程视图
    //err_code="0x01_C";//成功执行到获取了远程视图

    //  遍历id单元格     
    for(int x=0;x<F0.length;x++)
    {
    //  这里虽然获取了id的集合,但是没有插入,因为数据库中id是自增的所以无需插入:order by id asc
    String sql="INSERT INTO excel1_list (name,xlh,xh,gnms,cksm,swtp,qjlx,qjsx,sccj,gmsj,gmjg,bz)" ;
    sql+="values('"+F1[x]+"','"+F2[x]+"','"+F3[x]+"','"+F4[x]+"','"+F5[x]+"','"+F6[x]+"','"+F7[x]+"','"+F8[x]+"','"+F9[x]+"','"+F10[x]+"','"+F11[x]+"','"+F12[x]+"')";  

     my_stmt.execute(sql);
    //my_stmt.executeUpdate(sql); //执行插入语句

    //err_code="0x01_D";// 成功插入语句

    }
       ok = true;// 处理成功
       my_con.close(); // 关闭数据库
    }catch(Exception e)
   {
     e.printStackTrace();
   }

四 结果

在解析,连接数据库完毕之后就是进行插入数据,如下就是插入结果

这里写图片描述

五 附录

相关文件如下

链接:https://pan.baidu.com/s/1d82Z7lwj5l7tx0a37bZfOw 密码:pvnf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾继康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值