• Java:将Excel数据导入到数据库(一眼就看会)


    所用Jar包

    1. sqljdbc4.jar

    连接数据库的Jar包(根据数据库的不同进行选择,我用的SqlServer2008)

    2.Jxl.jar

    访问Excel的Jar包

    注意:支持以.xls结尾的Excel文件,可能不支持.xlsx结尾的 

    Excel数据:

     

    完整代码:

    package xsl;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;
    
    public class Test {
    
        public static void main(String[] args) {
            
            //1. java读取Excel文档内容
            String filePath = "C:/Users/0223000320/Desktop/student.xls";
            InputStream is = null;
            Workbook rwb = null;
            
            try {
                is = new FileInputStream(filePath);//定义文本输入流 
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            
            try {
                rwb = Workbook.getWorkbook(is);//打开Workbook 
            } catch (BiffException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //获取Excel表的Sheet1区域的数据
            Sheet sht = rwb.getSheet("Sheet1");  //或者rwb.getSheet(0)获取第一个区域
            int col = sht.getColumns();    //获得Excel列 
            int row = sht.getRows();    //获得Excel行  
            
            //定义一维数组,存放Excel表里的每一行的各个列的数据
            Object[] obj = null;
            //定义List集合,存放每一行的数据
            ArrayList<Object[]> list = new ArrayList<Object[]>();
            
            Cell c1 = null;
            
            try {
                //2. 连接数据库的几行代码
                Connection con = null;  
                PreparedStatement ps = null;  
                String url = "jdbc:sqlserver://localhost:1433;DatabaseName=test;";
                String sql = "INSERT INTO student(id, name, age) VALUES (?, ?, ?)"; 
                con = DriverManager.getConnection(url, "sa", "Rfid123456");
                con.setAutoCommit(true); //设置自动提交,默认也是TRUE,可不写  
                ps = con.prepareStatement(sql);// SQL预处理  
                
                //3. 读取Excel文档每个单元格的值
                //先将数据按行装入一个一维数组Object[]中, 然后将数组逐个加入到ArrayList  
                for(int i=0; i < row; i++){
                    obj = new Object[col];
                    for(int j =0 ;j <col; j++){
                        c1 = sht.getCell(j,i);
                        //add
                        String contents = c1.getContents();
                        System.out.println(contents);
                        obj[j] = c1.getContents();
                    }
                    System.out.println("------------");
                    list.add(obj);
                }
                
                //4. 再从list获取每条记录,插入数据库
                obj = new Object[3];
                for(int k = 0; k < row; k++){
                    obj = list.get(k);  
                    ps.setString(1, obj[0].toString());  
                    ps.setString(2, obj[1].toString());  
                    ps.setString(3, obj[2].toString());
                    ps.addBatch();  
    
                }
                ps.executeBatch();  //批量执行
                ps.close();  
                con.close();          
                
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            
        }
        
    }

     

    数据库插入情况:

    控制台打印:

    2
    aa
    23
    ------------
    3
    bb
    54
    ------------
    4
    qq
    45
    ------------
    

      

     

    简单来说,核心代码就是以下几行:

         InputStream is = fileList.get(0).getInputStream();
            Workbook rwb = Workbook.getWorkbook(is);
            Sheet st = rwb.getSheet(0);
            Map<String, String> map = new HashMap<String, String>();
            int Rows = sheet.getRows();
            for (int i = 1; i < Rows; i++) {
                int id = sheet.getCell(0, i).getContents();//获取第1行第i列
                String name = sheet.getCell(1, i).getContents().trim();//获取第2行第i列
                int age = sheet.getCell(2, i).getContents();//获取第3行第i列
                map.put(id , name + "&" + age);
    
            }
    
            return map;

    list和map根据情况选择,上面的几行代码是简单说明,并不是完整代码,根据需要做处理

    动态获取Excel表头指定字符串所在列:

    for(int i = 0 ; i < sheet.getColumns(); i++){
        String str = sheet.getCell(i, 0).getContents();
        if(str.equals("id")){
            System.out.println("id:" + i);
        }
        if(str.equals("name")){
            System.out.println("name:" + i);
        }
        if(str.equals("deleted")){
            System.out.println("deleted:" + i);
        }
    }

    适用于:多个文档的表头都有id、name、deleted,但是所在列不同

  • 相关阅读:
    关于开发 Web AI 的思考(kendryte K210)
    怪不得我说,这几个月的代码数据都跑哪里去了....
    在 Android 上使用蓝牙作为主机进行一对多从机传输数据的实测,理论 5
    写了一下 micropython 的文件系统单元测试
    mark 自己未来要写一下,蓝牙主机一对多从机和 K210 的网络通信优化过程。
    VUE实现Studio管理后台(五):手风琴式折叠组件(Accordion)
    VUE实现Studio管理后台(四):状态模式实现窗口停靠,灵动、自由
    VUE实现Studio管理后台(三):支持多语言国际化(vue-i18n)
    VUE实现Studio管理后台(二):Slot实现选项卡tab切换效果,可自由填装内容
    VUE实现Studio管理后台(一):鼠标拖放改变窗口大小
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/7742368.html
Copyright © 2020-2023  润新知