excel文件导入数据库

1、准备jar包:poi

2、前端jsp页面:

<body>

<!--

form表单中必须添加enctype="multipart/form-data"才可以上传文件

servlet中根据file名称来获取文件相对路径

-->
<form action="/phoneQuery" method="post" enctype="multipart/form-data">
    <table align="center">
        <tr>
            <td>
                请输入路径:
            </td>
            <td>
                <input type="file" name="file"/>
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="submit" value="提交"/>
            </td>
        </tr>
    </table>
</form>

3、实体类

//注释完成自动建表

@TableAnnotaion(tableName="PHONE_LOCATION")
public class PhoneInfo {

@ColumnAnnotation(name="id",length=11,type=ColumnTypeEnum.INT,key=true)
    private int id;
    
    @ColumnAnnotation(name="phone_segment",length=11,type=ColumnTypeEnum.INT)
    private int phone_segment;
    
    @ColumnAnnotation(name="province",length=128)
    private String province;
    
    @ColumnAnnotation(name="city",length=128)
    private String city;
    
    @ColumnAnnotation(name="operator",length=128)
    private String operator;
    
    @ColumnAnnotation(name="zone_code",length=6,type=ColumnTypeEnum.INT)
    private int zone_code;
    
    @ColumnAnnotation(name="zip_code",length=8,type=ColumnTypeEnum.INT)
    private int zip_code;

public int getId() {
        return id;
    }

public void setId(int id) {
        this.id = id;
    }

public int getPhone_segment() {
        return phone_segment;
    }

public void setPhone_segment(int phone_segment) {
        this.phone_segment = phone_segment;
    }

public String getProvince() {
        return province;
    }

public void setProvince(String province) {
        this.province = province;
    }

public String getCity() {
        return city;
    }

public void setCity(String city) {
        this.city = city;
    }

public String getOperator() {
        return operator;
    }

public void setOperator(String operator) {
        this.operator = operator;
    }

public int getZone_code() {
        return zone_code;
    }

public void setZone_code(int zone_code) {
        this.zone_code = zone_code;
    }

public int getZip_code() {
        return zip_code;
    }

public void setZip_code(int zip_code) {
        this.zip_code = zip_code;
    }
    
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
    }

}

4、servlet文件

//注解中加上MultipartConfig才可以处理页面发送过来的file路径

@MultipartConfig
@WebServlet(name="phoneQuery",urlPatterns="/phoneQuery")
public class PhoneQueryServlet extends HttpServlet {

  @Override
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      this.dataImport(req, resp);

  }

  /**
     * Excel文件导入
     */
    public void PhoneInsert(HttpServletRequest req, HttpServletResponse resp){

try {
                Collection<Part> ps = req.getParts();//获取web页面输入框的集合值
                for(Part p : ps){//分批处理输入框的集合值
                    List<PhoneInfo> phones = new ArrayList<PhoneInfo>();
                    InputStream in = p.getInputStream();//创建输入流
                    HSSFWorkbook wb = new HSSFWorkbook(in);//创建一个workbook对象(操作/解析excel)
                    int sheetNum = wb.getNumberOfSheets();//获取总的sheet数量
//                    System.out.println("sheetNum = "+sheetNum);
                    for(int i = 0;i<sheetNum;i++){
                        HSSFSheet sh = wb.getSheetAt(i);
                        int rowNum = sh.getLastRowNum();//获取总的行数
//                        System.out.println("rowNum = "+rowNum);
                        for(int j = 0;j<rowNum;j++){
                            HSSFRow row = sh.getRow(j);
                            int cellNum = row.getLastCellNum();//获取总的列数
//                            System.out.println("cellNum = "+cellNum);

PhoneInfo phone = new PhoneInfo();
                              phone.setId((int)row.getCell(0).getNumericCellValue());
                              phone.setPhone_segment((int)row.getCell(1).getNumericCellValue());
                              phone.setProvince(row.getCell(2).getStringCellValue());
                              phone.setCity(row.getCell(3).getStringCellValue());
                              phone.setOperator(row.getCell(4).getStringCellValue());
                              phone.setZone_code((int)row.getCell(5).getNumericCellValue());
                              phone.setZip_code((int)row.getCell(6).getNumericCellValue());
    //                    System.out.println(phone.toString());
                             phones.add(phone);
//                            for(int k = 0;k<cellNum;k++){
//                                HSSFCell cell = row.getCell(k);//取到每一列的单元格
//                                int cellType = cell.getCellType();//取到单元格的类型
//                                System.out.println(cellType);
//                                switch(cellType){//根据单元格类型来选择接受类型
//                                case 0://双精度浮点数
//                                    double cellD = cell.getNumericCellValue();
//                                    System.out.println(cellD);
//                                    break;
//                                case 1://字符串
//                                    String cellS = cell.getStringCellValue();
//                                    System.out.println(cellS);
//                                    break;
//                                default:
//                                    System.out.println("类型不匹配");
                                /*
                                 * 2、CELL_TYPE_FORMULA 公式型
                                 * 3、CELL_TYPE_BLANK 空值
                                 * 4、CELL_TYPE_BOOLEAN 布尔型
                                 * 5、CELL_TYPE_ERROR 错误
                                 */
//                                }
                            }
                        }
                    }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ServletException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

  }

  dao.phoneInsert(phones);

}   

5、dao层

/**
     * 将数据导入数据库
     */
    public void phoneInsert(List<PhoneInfo> phones){
//        PhoneInfo phone = new PhoneInfo();
        DBManager db = new DBManager();
        String sql = "Insert into PHONE_LOCATION values (?,?,?,?,?,?,?)";
        PreparedStatement state = db.getPreStatement(sql);
        int flag = 1;
        long startTime = System.currentTimeMillis();
        for(PhoneInfo phone : phones){
            try {
//                long id = db.getMaxId("PHONE_LOCATION");
//                System.out.println((int) id);
                state.setInt(1,phone.getId());
                state.setInt(2, phone.getPhone_segment());
                state.setString(3, phone.getProvince());
                state.setString(4, phone.getCity());
                state.setString(5, phone.getOperator());
                state.setInt(6, phone.getZone_code());
                state.setInt(7, phone.getZip_code());
                state.addBatch();
            } catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(flag%2000==0||flag==phones.size()){
                try {
                    state.executeBatch();
                    db.commit();
                    System.out.println("已经处理"+flag+"条数据");
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            flag++;
        }
        db.close();
        System.out.println(System.currentTimeMillis()-startTime);
    }

时间: 2024-12-20 04:15:01

excel文件导入数据库的相关文章

jQuery+php+ajax+PHPExcel实现上传excel文件导入数据库

项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript"src="/js/lib/jquery.ajax.form.js"></script> 视图文件:goods_list.ctp(商品列表), <div class="btnimport"> <form class='myupload' acti

将excel文件导入到数据库

参考:http://blog.csdn.net/jayxujia123/article/details/13684313 参考:http://kevin850115.iteye.com/blog/578142 MySQL官网:http://dev.mysql.com/doc/refman/5.7/en/load-data.html 学弟有个面试题,在群里问了下如何将excel文件导入到数据库.以前也没试过,正好在学习MySQL,练练手吧. 首先,将excel文件另存为用逗号分隔的csv文件,传到

POI 读取Excel文件,将Excel数据导入数据库

/** * 读取Excel单元格所显示的字符串(显示什么就返回什么) * 创建人:minlorry * 创建日期:2015-07-31 * 更新日期:2015-07-31 * 更新说明:生硬地处理了数值单元格的处理,日期单元格未作处理. * @param cell Excel单元格 * @return String 单元格显示的字符串 */ public static String getStringValue(Cell cell) { String stringValue = "";

csv文件或者excel表格导入数据库

 将csv文件或者excel表格导入数据库的方法: Excel数据直接导入mysql会需要用到phpexcel开源类,详情使用可以参考这篇文章~ http://www.cnblogs.com/freespider/p/3284828.html 本文使用的方法是: Excel ——> CSV——>MySql 首先将excel另存为csv文件,然后开始分析数据. 代码如下: 1 <span style="font-size:18px;"><?PHP 2 //将

十万级百万级数据量的Excel文件导入并写入数据库

一.需求分析 最近接到一个需求,导入十万级,甚至可能百万数据量的记录了车辆黑名单的Excel文件,借此机会分析下编码过程; 首先将这个需求拆解,发现有三个比较复杂的问题: 问题一:Excel文件导入后首先要被解析为存放对象的列表,数据量大的情况下可能会导致内存溢出,解析时间过长; 问题二:插入数据库的时候,数据量大,写入的时间长 问题三:要对数据库中的现有数据进项判断,不仅仅要做插入动作,还要将数据库的数据与导入的数据对比,判断是否做更新操作 其中: 问题一和问题三,可以看做同一类,因为主要涉及

.NET从EXCEL文件导入数据

.NET com组件 这种方法在计算机没有安装office套件时,也是能够使用的.所以不依赖于软件, 但是还是需要xcel.exe编译后的dll文件打包到相应的程序中来引用.这样将dll文件" 随身携带",就可以了.还是挺不错的! 1.注册Microsoft.Office.Interop.Excel.dll 在office安装文件夹下找到excel.exe,路径D:\Program Files(x86)\Microsoft Office\Office15.将excel.exe文件复制到

关于Excel文件导入到Sqlserver2008中出现截断错误的解决办法

出现错误的可能原因: 1.数据库字段Varchar长度不够: 2.不能用Text类型: 3.数据中可能存在换行符: 4.数据项文本过长,超过4000: 5.前8行的最大长度不够大,后面有超过的. 解决办法: 1.修改Varchar长度为足够长: 2.替换掉换行符(可手工输入一个换行符,复制到替换文本框中,Office中可按住Alt键,从小键盘输入10,再松开Alt键): 3.第一行中记录设足够长,导入后再替换: 4.把Excel文件存为2007格式,可解决导入后很多数据项为NULL的问题: 5.

EXCEL数据导入数据库实例(NPOI)

Default.aspx 页面代码: 引用了:    <script src="../../js/jquery.easyui.min.js" type="text/javascript"></script> <form id="fileForm" runat="server" enctype="multipart/form-data" method="post&quo

[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作