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,但是所在列不同

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值