java中怎么把excel导入数据库

 我来答
H爱不绝迹
2018-04-11 · TA获得超过7.6万个赞
知道大有可为答主
回答量:60
采纳率:85%
帮助的人:3.8万
展开全部

1、利用Excel第三方工具,将Excel文件读取到内存中。使用最简单,方便的工具是apache的poi工具包,自己网上下载 http://poi.apache.org/ ,使用方法网上一搜一大片。

2、如果是对于特别大的excel(大于20M的话),简单的读取方法就容易内存溢出了,需要采用流式读取的方式,参考http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api 

3、将已读入内存的Excel数据,整理成写数据库的数据结构,然后插入数据库。这部分工作应该不用介绍了,就是基本的数据库操作方法,与excel无关了

具体如下:

1、简介

编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,是计算体系按照该计算方式运行,并最终得到相应结果的过程。

为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。

2、汇编程序

汇编程序。使用汇编语言编写计算机程序,程序员仍然需要十分熟悉计算机系统的硬件结构,所以从程序设计本身上来看仍然是低效率的、繁琐的。但正是由于汇编语言与计算机硬件系统关系密切,在某些特定的场合,如对时空效率要求很高的系统核心程序以及实时控制程序等,迄今为止汇编语言仍然是十分有效的程序设计工具。

3、执行原理

计算机对除机器语言以外的源程序不能直接识别、理解和执行,都必须通过某种方式转换为计算机能够直接执行的。这种将高级编程硬件程序设计语言编写的源程序转换到机器目标程序的方式有两种:解释方式和编译方式。

匿名用户
2016-09-17
展开全部

1、加入依赖的jar文件:

引用:
*mysql的jar文件 
*Spring_HOME/lib/poi/*.jar

2、编写数据库链接类 

package com.zzg.db;  
  
import java.sql.Connection;  
import java.sql.DriverManager;  
  
public class DbUtils {  
    private static Connection conn;  
  
    static {  
        try {  
            Class.forName("com.mysql.jdbc.Driver");  
            conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123456");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    public static Connection getConn() {  
        return conn;  
    }  
  
    public static void setConn(Connection conn) {  
        DbUtils.conn = conn;  
    }  
}

3、编写数据库操作类 

package com.zzg.db;  
  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.SQLException;  
  
public class ExcuteData {  
    private PreparedStatement pstmt;  
    public boolean ExcuData(String sql) {  
        Connection conn = DbUtils.getConn();  
        boolean flag=false;  
        try {  
            pstmt = conn.prepareStatement(sql);  
            flag=pstmt.execute();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        return flag;  
    }  
}

4、编写Excel表格实体类 

package com.zzg.model;  
  
public class TableCell {  
    private String _name;  
    private String _value;  
  
    public String get_name() {  
        return _name;  
    }  
  
    public void set_name(String _name) {  
        this._name = _name;  
    }  
  
    public String get_value() {  
        return _value;  
    }  
  
    public void set_value(String _value) {  
        this._value = _value;  
    }  
}

5、编写主键生成方法

package com.zzg.util;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.Random;  
  
public class GenericUtil {  
    public static String getPrimaryKey()  
    {  
        String primaryKey;  
        primaryKey = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());  
        Random r = new Random();  
        primaryKey +=r.nextInt(100000)+100000;  
        return primaryKey;  
    }  
}

6、编写Excel操作类 

package com.zzg.deployData;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.Serializable;  
import java.util.ArrayList;  
import java.util.List;  
import org.apache.poi.hssf.usermodel.HSSFCell;  
import org.apache.poi.hssf.usermodel.HSSFRow;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import com.zzg.db.ExcuteData;  
import com.zzg.model.TableCell;  
import com.zzg.util.GenericUtil;  
  
public class OperExcel<T extends Serializable> {  
    private HSSFWorkbook workbook;  
    private String tableName;  
    private Class<T> type;  
    private String sheetName;  
  
    public OperExcel(File excelFile, String tableName, Class<T> type,  
            String sheetName) throws FileNotFoundException,  
            IOException {  
        workbook = new HSSFWorkbook(new FileInputStream(excelFile));  
        this.tableName = tableName;  
        this.type = type;  
        this.sheetName = sheetName;  
        InsertData();  
    }  
  
    // 向表中写入数据  
    public void InsertData() {  
        System.out.println("yyy");  
        ExcuteData excuteData = new ExcuteData();  
        List<List> datas = getDatasInSheet(this.sheetName);  
        // 向表中添加数据之前先删除表中数据  
        String strSql = "delete from " + this.tableName;  
        excuteData.ExcuData(strSql);  
        // 拼接sql语句  
        for (int i = 1; i < datas.size(); i++) {  
            strSql = "insert into " + this.tableName + "(";  
            List row = datas.get(i);  
            for (short n = 0; n < row.size(); n++) {  
                TableCell excel = (TableCell) row.get(n);  
                if (n != row.size() - 1)  
                    strSql += excel.get_name() + ",";  
                else  
                    strSql += excel.get_name() + ")";  
            }  
            strSql += " values (";  
            for (short n = 0; n < row.size(); n++) {  
                TableCell excel = (TableCell) row.get(n);  
                try {  
                    if (n != row.size() - 1) {  
                        strSql += getTypeChangeValue(excel) + ",";  
                    } else  
                        strSql += getTypeChangeValue(excel) + ")";  
                } catch (RuntimeException e) {  
                    e.printStackTrace();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
            //执行sql  
            excuteData.ExcuData(strSql);  
        }  
    }  
  
    /** 
     * 获得表中的数据 
     * @param sheetName 表格索引(EXCEL 是多表文档,所以需要输入表索引号) 
     * @return 由LIST构成的行和表 
     */  
    public List<List> getDatasInSheet(String sheetName) {  
        List<List> result = new ArrayList<List>();  
        // 获得指定的表  
        HSSFSheet sheet = workbook.getSheet(sheetName);  
        // 获得数据总行数  
        int rowCount = sheet.getLastRowNum();  
        if (rowCount < 1) {  
            return result;  
        }  
        // 逐行读取数据  
        for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {  
            // 获得行对象  
            HSSFRow row = sheet.getRow(rowIndex);  
            if (row != null) {  
                List<TableCell> rowData = new ArrayList<TableCell>();  
                // 获得本行中单元格的个数  
                int columnCount = sheet.getRow(0).getLastCellNum();  
                // 获得本行中各单元格中的数据  
                for (short columnIndex = 0; columnIndex < columnCount; columnIndex++) {  
                    HSSFCell cell = row.getCell(columnIndex);  
                    // 获得指定单元格中数据  
                    Object cellStr = this.getCellString(cell);  
                    TableCell TableCell = new TableCell();  
                    TableCell.set_name(getCellString(  
                            sheet.getRow(0).getCell(columnIndex)).toString());  
                    TableCell.set_value(cellStr == null ? "" : cellStr  
                            .toString());  
                    rowData.add(TableCell);  
                }  
                result.add(rowData);  
            }  
        }  
        return result;  
    }  
  
    /** 
     * 获得单元格中的内容 
     *  
     * @param cell 
     * @return result 
     */  
    protected Object getCellString(HSSFCell cell) {  
        Object result = null;  
        if (cell != null) {  
            int cellType = cell.getCellType();  
            switch (cellType) {  
  
            case HSSFCell.CELL_TYPE_STRING:  
                result = cell.getStringCellValue();  
                break;  
            case HSSFCell.CELL_TYPE_NUMERIC:  
                result = cell.getNumericCellValue();  
                break;  
            case HSSFCell.CELL_TYPE_FORMULA:  
                result = cell.getNumericCellValue();  
                break;  
            case HSSFCell.CELL_TYPE_ERROR:  
                result = null;  
                break;  
            case HSSFCell.CELL_TYPE_BOOLEAN:  
                result = cell.getBooleanCellValue();  
                break;  
            case HSSFCell.CELL_TYPE_BLANK:  
                result = null;  
                break;  
            }  
        }  
        return result;  
    }  
  
    // 根据类型返回相应的值  
    @SuppressWarnings("unchecked")  
    public String getTypeChangeValue(TableCell excelElement)  
            throws RuntimeException, Exception {  
        String colName = excelElement.get_name();  
        String colValue = excelElement.get_value();  
        String retValue = "";  
        if (colName.equals("id")) {  
            retValue = "'" + GenericUtil.getPrimaryKey() + "'";  
            return retValue;  
        }  
        if (colName == null) {  
            retValue = null;  
        }  
        if (colName.equals("class_createuser")) {  
            retValue = "yaa101";  
            return "'" + retValue + "'";  
        }  
        retValue = "'" + colValue + "'";  
        return retValue;  
    }  
}

7、编写调用操作Excel类的方法 

package com.zzg.deployData;  
  
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
  
public class DeployData {  
    private File fileOut;  
  
    public void excute(String filepath) {  
        fileOut = new File(filepath);  
        this.deployUserInfoData();  
    }  
  
    public void deployUserInfoData() {  
        try {  
            new OperExcel(fileOut, "test", Object.class, "Sheet1");  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

8、编写客户端 

package com.zzg.client;  
  
import com.zzg.deployData.DeployData;  
  
public class DeployClient {  
    public static void main(String[] args) {  
        DeployData deployData = new DeployData();  
        deployData.excute("D://test.xls");  
    }  
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风流沼
2016-09-17 · TA获得超过142个赞
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:93.3万
展开全部

这个问题分两步走:

  1. 利用Excel第三方工具,将Excel文件读取到内存中。使用最简单,方便的工具是apache的poi工具包,自己网上下载 http://poi.apache.org/ ,使用方法网上一搜一大片。

    如果是对于特别大的excel(大于20M的话),简单的读取方法就容易内存溢出了,需要采用流式读取的方式,参考http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api 

  2. 将已读入内存的Excel数据,整理成写数据库的数据结构,然后插入数据库。这部分工作应该不用介绍了,就是基本的数据库操作方法,与excel无关了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友83dcbee
2018-05-27
知道答主
回答量:3
采纳率:0%
帮助的人:1310
展开全部

Java的poi实现Excel导入导出【导出支持多个sheet,导入支持高低版本的excel】

场景:
在很多企业管理系统中都会碰到,excel的poi导入导出功能;需求很大,解决方案也很多,(不过我没用过别人的,喜欢用自己写的^_^,没毛病),

工具源码:

1、Excel导出支持多sheet:    >>>快速使用<<<<  
2、excel简单导入代码 [支持2007前后版本]  >>>快速使用<<<<

功能描述:  

导出:支持多sheet ,支持导出list<bean> list<Map> 写的比较糙,有相关需求的随便看看,参考着自己个儿改改用
导入:根据配置,导入得到List<Map>数据,可以自己实现List<JavaBean>的扩展(比如使用反射),支持2007前后版本Excel的处理

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式