精华内容
参与话题
问答
  • 一. 页面HTML导入部分: 1. 弹出导入Excel的模态框: 写导入方法,方法里可根据自己的需求写一些限制 ·禁用保存按钮 ·重置表单等最后弹出模态框。...显示加载层-提交表单-表单数据重载-清空表...

    一.
    页面HTML导入部分:
    1.
    弹出导入Excel的模态框:

    写导入方法,方法里可根据自己的需求写一些限制

    ·禁用保存按钮

    ·重置表单等最后弹出模态框。

    在这里插入图片描述

    1. 下载模板:·打开一个新的窗口,并在窗口中装载指定URL地址的网页。
    2. 上传Excel表格保存到临时表:
      ·避免取消选择后触发上传首先写个判断,判断上传文件为空或者为undefined就return。显示加载层-提交表单-表单数据重载-清空表单。
    3. 保存导入的Excel数据到数据库
      在这里插入图片描述
      二.控制器导入部分:
      1.下载数据模板:

    ·获取模板路径并判断模板是否存在,不存在就联系系统运维人员,存在则获取文件名称并返回文件。
    2. 将导入的数据保存到session里:
    ·获取读取的文件
    ·把文件转换为二进制数组
    ·二进制数组转成内存流
    ·利用NPOI把内存流中的数据读取成Excel-把session中的ImportExcel移除避免残留以前数据

    3.提取session里的数据进行分页

    4.保存入数据库:

    ·纪录保存成功的数据条数和数据库重复而保存失败的数据条数

    ·实例化并运用foreach循环来判断是否与已有数据库重复

    ·最后返回Json

    三.HTML导出部分

    1.定义导出方法:function + 方法名(){}。

    2.声明变量:方法里声明变量来接收表格数据的筛选条件。

    3.判断:判断(if)出声明的变量是否为空或者为undefined,如果为空或undefined则直接赋值为零。

    4.弹出询问框(关闭询问框-打开控制器的导出方法)。

    四.控制器导出部分

    1.导出数据到Excel表格:public
    ActionResult XX(参数){ }。

    2.数据查询与条件筛选:多表联查
    分组联查等方法筛选出需要的信息,并用if语句进行条件判断。

    3.创建工作簿:HSSFWorkbook XX = new HSSFWorkbook();

    4.创建工作表:ISheet sheet = XX.CreateSheet(”表名”);

    5.创建表头: IRow headRow = sheet.CreateRow(0);

    6.设计表头: headRow. CreateCell(0).SetCellValue(“XX”);

              headRow. CreateCell(1).SetCellValue(“XX”);
    
              headRow. CreateCell(2).SetCellValue(“XX”);
    

    7.写入表格数据:for循环这个新的表,创建行并写入数据。

    ·将Excel数据转换为文件流输出,输出前调用Seek(偏移量,游标位置)方法来确定流开始的位置。

    ·seek(0,seekorigin.Begin)第一个参数表示相对的位置,第二个参数表示参照位置;

    8.为下载的Excel文件命名
    在这里插入图片描述
    ·假设文件名为fileName,则string fileName=“文件名称”+现在的时间+“.xls”
    例:string fileName =
    “考生信息” +DateTime.Now.ToString(“yyy-MM-dd-HH-mm-ss-ffff”) + “.xls”

    9.return File(ExcelStream,“application/vnd.ms-excel”, fileName)

    展开全文
  • MYSQL数据导出备份、导入的几种方式

    万次阅读 2018-05-06 16:47:32
    第一种 mysqldump:这是mysql自带的备份命令,提供了很多扩展参数可供选择,工作中常用此方式常用语法: mysqldump[options] database [tables,多个表用空格隔开] --databases [options] BD1 [DB2.....

    第一种  mysqldump:

    这是mysql自带的备份命令,提供了很多扩展参数可供选择,工作中常用此方式

    常用语法:

       mysqldump[options] database [tables,多个表用空格隔开]

                              --databases [options] BD1 [DB2..多个库用空格隔开]

                              --all-databases [options]

    导出(备份):  导出库 > SQL文件(本地导入导出不需要-P3306 -h 192.168.1.25)(-q –e写法可以合并)

    mysqldump -P 3306 -h 192.168.1.25 -uroot -p -q -e base_push > C:\Users\thinkive\Desktop\base_push20170921.sql

    -P 3306 -h 192.168.1.25      是远程mysql地址和端口

    -uroot                                    是远程用户名为root

    base_push                            是远程库名

    以上是导入导出数据的语句,该方法15分钟导出1.6亿条记录,导出的文件中平均7070条记录拼成一个insert语句,通过source进行批量插入,导入1.6亿条数据耗时将近5小时。平均速度:3200W/h。后来尝试加上--single-transaction参数,结果影响不大。另外,若在导出时增加-w参数,表示对导出数据进行筛选,那么导入导出的速度基本不变,筛选出的数据量越大,时间越慢而已。对于其中的参数这里进行说明:

    [options]参数

    含义

    -q   , --quick

    在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中

    -c

    是在insert中增加具体的字段名。这样对目的表结构不同原表,情况下更有用

    -e  ,

    --extended-insert

    用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项

    -t

    仅导出表数据,不导出表结构

    --opt –d

    仅导出表结构

    -R , --routines

    导出存储过程以及自定义函数。

    --triggers

    导出触发器,默认启用

    -E  ,  --events

    导出事件

    --single-transaction

    该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。在本例子中没有起到加快速度的作用
    mysqldump -uroot -p --host=localhost --all-databases --single-transaction

    --master-data=[1/2]

     如果值等于1,就会添加一个CHANGE MASTER语句(二进制文件的名称和位置
     如果值等于2,就会在CHANGE MASTER语句前添加注释 

    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

     

    如果加入此配置,mysql说Binlogging on server not active,解决方案如下:

    Linux:需要在/etc/my.cnf里的[mysqlid]下方加入: log-bin=mysql-bin  再重启

    Windows:mysql安装目录下my.ini文件,如上操作

    --all-databases  , -A

    导出全部数据库

    --add-drop-database

    每个数据库创建之前添加drop数据库语句。

    --add-drop-table

    每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

    -w  ,  --where

    过滤条件,只支持单表数据条件导出

    mysqldump –ubackup –p –master-data=2 –where "id>10 and id<20" orderdb order > order.sql

    如果想要看更多的扩展参数可以看官网介绍

    [all options] https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

    导入: 库 < SQL文件(本地导入导出不需要-P 3306 -h 192.168.1.25)

    mysql -P 3306 -h 127.0.0.1 -uroot -p base_push < C:\Users\thinkive\Desktop\base_push.sql

                远程端口  远程ip      用户名       库名            导入文件路径

    第二种 mysqlpump:

    与mysqldump相比:

    支持基于表的并行导出功能(参数--default-parallelism,默认为2,参数--parallel-schemas,控制并行导出的库)

    导出的时候带有进度条(参数--watch-progress,默认开启)

    支持直接压缩导出导入(压缩算法参数--compress-output=zlib或lz4 (生成同样后缀名文件,zlib速度较lz4快,体积也较小,解压缩:zlib_decompress input_file(intput.zlib) output_file(output.sql)   lz4类似(mysql5.7.10命令) 不推荐使用,解压缩后数据不完全)

    注:

       mysqldump导出的文件没有库的限制(以及建库语句等),所以可以迁入与牵出库名不同.

       mysqlpump导出的库建表有库名的限制(默认也含建库语句),所以迁入库不需要建立(但需要与迁出库名相同)

     

    对比测试:
    1.mysqlpump(支持多进程)压缩备份test数据库(21G)三个并发线程备份,消耗时间:2m42.515s,gzip压缩率要比LZ4大
    mysqlpump -uroot -p -h127.0.0.1 --single-transaction--default-character-set=utf8 --compress-output=LZ4 --default-parallelism=3 -Btest | gzip > d:\temp\mysqlpump.test.gz

    2.mysqldump(单进程)压缩备份test数据库(21G),消耗时间:28m9.930s,gzip压缩率要比LZ4大(gzip命令需要在linux环境使用)
    mysqldump -uroot -p -h127.0.0.1 --default-character-set=utf8 -P3306 --skip-opt--add-drop-table --create-options  --quick --extended-insert--single-transaction -B test | gzip >/data/mysql/mysql3306/data/test_db.sql.gz

    3.mydumper压缩备份test数据库(21G),开三个并发线程,消耗时间:10m10.207s 
    mydumper -u test -h 127.0.0.1 -p safe2016 -P 3306 -t 3 -c -B test -o /data/mysql/mysql3306/data/

    4.mydumper压缩备份test数据库(21G),三个并发线程备份,并且开启对一张表多个线程以chunk的方式批量导出,消耗时间:10m9.518s
    mydumper -u test -h 127.0.0.1 -p safe2016 -P 3306 -t 3 -r 300000 -c -B test -o/data/mysql/mysql3306/data/

     

    从上面看出,mysqlpump的备份效率是最快的,mydumper次之,mysqldump最差。所以在IO允许的情况下,能用多线程就别用单线程备份。并且mysqlpump还支持多数据库的并行备份,而mydumper要么备份一个库,要么就备份所有库。
    由于实际情况不同,测试给出的速度提升只是参考。到底开启多少个并行备份的线程,这个看磁盘IO的承受能力,若该服务器只进行备份任务,可以最大限制的来利用磁盘.

     

    mysqlpump的并行导出功能的架构为:队列+线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定1个或者多个数据库。但是,对于每张表的导出只能是单个线程的

    mydumper支持一张表多个线程以chunk的方式批量导出,这在主键是随机的情况下,导出速度还能有提升

    MySQL 5.7.11版本解决了一致性备份问题,推荐线上环境使用

     

    mysql压缩成gz方式导入与导出(linux环境)     一定数据:导出成sql格式:63MB, gz格式:2.78MB

    mysqlpump [options] –B database_name | gzip> /opt/database_name.sql.gz

    gunzip < backupfile.sql.gz | mysql -u用户名 -p密码(也可不输入)数据库名

     

    命令示例(--compress-output=zlib压缩参数必须相应生成压缩文件,linux环境`>`前可加`| gzip`生成相应gz文件,不然为sql):

    mysqlpump –P 3306 -h192.168.1.189 -uroot -p--single-transaction --default-character-set=utf8 --default-parallelism=3

    -B thinkive_base_push > D:\Administrator\Desktop\thinkive.sql

    [all options] https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html

    选项

    Description

    介绍

    --add-drop-database

    在每个CREATE DATABASE语句之前添加DROP DATABASE语句

     

    --add-drop-table

    在每个CREATE TABLE语句之前添加DROP TABLE语句

     

    --add-drop-user

    在每个CREATE USER语句之前添加DROP USER语句

     

    --add-locks

    用LOCK TABLES和UNLOCK TABLES语句环绕每个表转储

     

    --all-databases

    转储所有数据库

     

    --bind-address

    使用指定的网络接口连接到MySQL服务器

     

    --character-sets-dir

    安装字符集的目录

     

    --complete-insert

    使用包含列名称的完整INSERT语句

     

    --compress

    压缩客户端和服务器之间发送的所有信息

     

    --compress-output

    输出压缩算法,zlib或lz4(生成同样文件,zlib速度较lz4快,体积也较小), 默认不压缩,生成sql文件; 如使用此参数,须指定生成的压缩文件扩展名

    --databases / -B

    导出指定多个库,如mysqlpump--databases db_name1 db_name2 ...

    导出指定库的多个表,如mysqlpump db_name tbl_name1 tbl_name2

     

    --debug

    编写调试日志

     

    --debug-check

    程序退出时打印调试信息

     

    --debug-info

    打印程序退出时的调试信息,内存和CPU统计信息

     

    --default-auth

    身份验证插件使用

     

    --default-character-set

    指定默认字符集

     

    --default-parallelism

    并行处理的默认线程数(较mysqldump新增)

     

    --defaults-extra-file

    除了通常的选项文件外,还要读取已命名的选项

     

    --defaults-file

    只读取命名的选项文件

     

    --defaults-group-suffix

    选项组后缀值

     

    --defer-table-indexes

    对于重新加载,将索引创建推迟到加载表行之后

     

    --events

    从转储的数据库转储事件

     

    --exclude-databases

    要从转储中排除的数据库

     

    --exclude-events

    要从转储中排除的事件

     

    --exclude-routines

    从转储中排除的例程

     

    --exclude-tables

    要从转储中排除的表

     

    --exclude-triggers

    触发器从转储中排除

     

    --exclude-users

    用户从转储中排除

     

    --extended-insert

    使用多行INSERT语法

     

    --help

    显示帮助信息并退出

     

    --hex-blob

    使用十六进制符号转储二进制列

     

    --host

    主机连接到(IP地址或主机名)

     

    --include-databases

    要包含在转储中的数据库

     

    --include-events

    包含在转储中的事件

     

    --include-routines

    包含在转储中的例程

     

    --include-tables

    要包含在转储中的表

     

    --include-triggers

    触发器包含在转储中

     

    --include-users

    用户包含在转储中

     

    --insert-ignore

    写INSERT IGNORE而不是INSERT语句

     

    --log-error-file

    将警告和错误附加到指定的文件

     

    --login-path

    阅读.mylogin.cnf中的登录路径选项

     

    --max-allowed-packet

    发送到服务器或从服务器接收的最大数据包长度

     

    --net-buffer-length

    TCP / IP和套接字通信的缓冲区大小

     

    --no-create-db

    不要写CREATE DATABASE语句(如果迁出库名与原库名不一致),默认包含建库

     

    --no-create-info

    不要编写重新创建每个转储表的CREATE TABLE语句

     

    --no-defaults

    读取任何选项文件

     

    --parallel-schemas

    指定模式处理并行性

     

    --password

    连接到服务器时使用的密码

     

    --plugin-dir

    安装插件的目录

     

    --port

    用于连接的TCP / IP端口号

     

    --print-defaults

    打印默认选项

     

    --protocol

    使用连接协议

     

    --replace

    编写REPLACE语句而不是INSERT语句

     

    --result-file

    直接输出到给定的文件

     

    --routines

    从转储的数据库转储存储的例程(过程和函数)

     

    --secure-auth

    不要以旧(4.1之前)格式发送密码到服务器

     

    --set-charset

    添加SET NAMES default_character_set来输出

     

    --set-gtid-purged

    是否添加SET @@ GLOBAL.GTID_PURGED输出

    5.7.18

    --single-transaction

    在单个事务中转储表(5.7.9--default-parallelism多线程才能与其合用,且其与--add-locks互斥)

     

    --skip-definer

    从视图和存储的程序CREATE语句中删除DEFINER和SQL SECURITY子句

     

    --skip-dump-rows

    不要转储表行

     

    --socket

    用于连接到localhost,要使用的Unix套接字文件

     

    --ssl

    启用加密连接

     

    --ssl-ca

    包含受信任的SSL证书颁发机构列表的文件

     

    --ssl-capath

    包含可信SSL证书颁发机构证书文件的目录

     

    --ssl-cert

    包含X509证书的文件

     

    --ssl-cipher

    连接加密允许的密码列表

     

    --ssl-crl

    包含证书吊销列表的文件

     

    --ssl-crlpath

    包含证书撤销列表文件的目录

     

    --ssl-key

    包含X509密钥的文件

     

    --ssl-mode

    服务器连接的安全状态

    5.7.11

    --ssl-verify-server-cert

    根据服务器证书通用名称身份验证主机名称

     

    --tls-version

    允许加密连接的协议

    5.7.10

    --triggers

    每个转储表的转储触发器

     

    --tz-utc

    添加SET TIME_ZONE ='+ 00:00'转储文件

     

    --user

    连接到服务器时使用的MySQL用户名

     

    --users

    转储用户帐户

     

    --version

    显示版本信息并退出

    5.7.9

    --watch-progress

    显示进度指示器

     

    第三种 通过data数据文件夹内容进行备份、还原:

    直接复制data数据文件夹下相应库和ibdata1文件迁移到新库中(新库最好是空白的,以免数据覆盖),笔者在迁移新电脑时 装完mysql,就懒得把原机器mysql中的各个库像前列方法那样拷贝迁移,所以索性直接复制原机器的data下数据文件替换到新电脑的mysql相应路径,经测试,没有问题.


    展开全文
  • 最近在做一个项目,需要对数据进行导入导出,实现之后...对于数据的导入导出,我们首先写一个工具类(数据导入导出是excel结构) 1、先来看看导入代码 public static List&lt;User&gt; importExcel(Fil...

    最近在做一个项目,需要对数据进行导入导出,实现之后,自己也做了一个总结,总体来说还是比较容易的。第一次的话肯定有许多坑的,细节真的很重要,当你踏过一个又一个坑,一路路走来,你会发现自己的信心越来越强。

    对于数据的导入导出,我们首先写一个工具类(数据导入导出是excel结构)

    1、先来看看导入代码

     public static List<User> importExcel(File file,String fileName) throws IOException{
    
            // 判断一下表单Excel是03版本还是07版本
            Workbook workbook = getWork(fileName);
            List<User> userList = new ArrayList<User>();
            // 获取第一个表单
            Sheet sheet = workbook.getSheetAt(0);
            // 获取第一个表单的迭代器
            Iterator<Row> rows = sheet.rowIterator();
            while (rows.hasNext()) {
                // 获取行数据
                Row row = rows.next();
                // 获取第一行的迭代器
                Iterator<Cell> cells = row.cellIterator();
    
                User user = null;
                if (row.getRowNum() > 0) {
                    user = new User();
                    System.out.println("第几行" + row.getRowNum());
                }
                while(cells.hasNext()) {
                    Cell cell = cells.next();
                    int i = cell.getColumnIndex();// 获取每一行的列索引
                    System.out.println("Cell==" + cell.getColumnIndex());
    
                    if (user != null) {
                        switch (i) {
                            case 0:
                                // 用户名称
                                //row.getCell(i).setCellType(Cell.CELL_TYPE_STRING);
                                user.setName(String.valueOf(cell.getStringCellValue()));
                                break;
                            case 1:
                                // 用户账号
                                //  // 账户是String类型 传进来的是数字类型 需要转换一下
                                row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
                                user.setAccount(String.valueOf(cell.getStringCellValue()));
                                break;
                            case 2:
                                // 用户手机
                                /**
                                 * Cannot get a text value from a numeric cell
                                 * 电话字段大小11位,自动解析成十六进制
                                 * 为了防止以上异常出现
                                 * 需要设置cell的类型
                                 * 然后 再把纯数字转换成字符串输出
                                 */
                                row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
                                   user.setMobile(String.valueOf(cell.getStringCellValue()));
                                break;
                            case 3:
                                // 用户性别
                                /**
                                 * Cannot get a text value from a boolean cell
                                 * 布尔类型的也需要转换
                                 */
                                row.getCell(3).setCellType(Cell.CELL_TYPE_BOOLEAN);
                                user.setGender(String.valueOf(cell.getBooleanCellValue()).toLowerCase());
                                break;
                            case 4:
                                // 用户邮箱
                                user.setEmail(String.valueOf(cell.getStringCellValue()));
                                break;
                            case 5:
                                // 用户部门
                                user.setDept(String.valueOf(cell.getStringCellValue()));
                                break;
                            case 6:
                                // 备注
                                user.setMemo(String.valueOf(cell.getStringCellValue()));
                                break;
                            default:
                                System.out.println("Unsigned cell type!"); // 未定义类型
                                break;
                        }
                    }
                }
                userList.add(user);
            }
            return userList;
    
        }
    
    private static Workbook getWork(String fileName) throws IOException{
    
            Workbook workbook = null;
            if (fileName != null ){
                try {
                    String filePath = fileName.substring(fileName.lastIndexOf("."),fileName.length());
                    FileInputStream fileInputStream = new FileInputStream(new File(fileName));
                    if (".xls".equals(filePath.trim().toLowerCase())) {
                        // 2003版本
                        workbook = new HSSFWorkbook(fileInputStream);
                    } else if (".xlsx".equals(filePath.trim().toLowerCase())) {
                        // 2007版本
                        workbook = new XSSFWorkbook(fileInputStream);
                    }
    
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
            return workbook;
        }

    这是导入数据代码,其中注释比较清楚,都是细节,根据自己的需要选择类型

     

    // 导入Excel 文件
        @RequestMapping(value = "/importExcel",produces="text/html;charset=UTF-8", method = {RequestMethod.GET,RequestMethod.POST})
        public String importExcel(@RequestParam(value = "myFile",required = false) MultipartFile file,HttpServletRequest request) throws IOException {
    
            Map<String, Object> userMap = new HashMap<String, Object>();
            if (!file.isEmpty()) {
                // 上传文件名
                String path = request.getSession().getServletContext().getRealPath("importExcel");
                String fileName = file.getOriginalFilename();
                File filePath = new File(path, fileName);
                // 判断路径是否存在,有的话新建一个
                if (!filePath.mkdirs()) {
                    // 创建父级文件路径
                    filePath.mkdirs();
                }
                try {
                    // 将上传文件保存到一个目标文件当中
                    file.transferTo(filePath);
                    //file.transferTo(new File(path + File.separator + fileName));
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
                    if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")){
                        List<User> list = userService.parseExcel(filePath,filePath.toString());
                        //List<User> list = ExcelUtil.importExcel(filePath,filePath.toString());
                        if (list != null && list.size() > 0) {
    
                            // 批量添加数据库
                            userService.insertUsers(list);
                            return "successImport";
                        }
                    }
    
    
    
            }
            return "error";
        }

    我用的是SSM框架,因此导入的时候需要在mapper.xml文件里面写sql语句。

    <!-- 批量文件导入到数据库 -->
        <insert id="insertUsers" parameterType="java.util.List">
             INSERT INTO tax_user
            (name, account, mobile, gender, email, dept, memo)
            VALUES
            <foreach collection="list" item="item" open="(" close=")" index="index" separator=",">
    
                  #{item.name,jdbcType=VARCHAR},
                  #{item.account,jdbcType=VARCHAR},
                  #{item.mobile,jdbcType=VARCHAR},
                  #{item.gender,jdbcType=VARCHAR},
                  #{item.email,jdbcType=VARCHAR},
                  #{item.dept,jdbcType=VARCHAR},
                  #{item.memo,jdbcType=VARCHAR}
    
            </foreach>
    
        </insert>

    2、导出数据

    (1)不需要写jsp界面

     // 导出Excel  不需要直接跳转到jsp界面
        @RequestMapping("doExportExcel")
        public String doExportExcel(HttpServletResponse response) throws Exception {
            // 第一步 创建一个Workbook,对应一个Excel
            HSSFWorkbook workbook = new HSSFWorkbook();
            // 第二步 创建一个sheet,对应于Excel中的sheet
            HSSFSheet sheet = workbook.createSheet("用户信息表");
            // 第三步 在sheet表中添加表头第0行,
            HSSFRow row = sheet.createRow(0);
            // 第四步 创建单元格,并设置值表头,设置表头居中
            HSSFCellStyle style = workbook.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 居中格式
    
    
            HSSFCell cell = row.createCell(0); // 表中第一列
            cell.setCellValue("用户名");
            cell.setCellStyle(style);
    
            cell = row.createCell(1); // 第二列
            cell.setCellValue("账号");
            cell.setCellStyle(style);
    
            cell = row.createCell(2); // 第三列
            cell.setCellValue("所属部门");
            cell.setCellStyle(style);
    
            cell = row.createCell(3); // 第四列
            cell.setCellValue("性别");
            cell.setCellStyle(style);
    
            cell = row.createCell(4); // 第五列
            cell.setCellValue("电子邮箱");
            cell.setCellStyle(style);
    
            cell = row.createCell(5);
            cell.setCellValue("电话");
            cell.setCellStyle(style);
    
            cell = row.createCell(6);
            cell.setCellValue("备注");
            cell.setCellStyle(style);
    
            // 第五步 写入实体数据
            PageUtil pageUtil = new PageUtil();
            pageUtil.setCurrentPage(1);
            pageUtil.setPageSize(999999);
            Page<User> page = new Page<User>(pageUtil.getCurrentPage(),pageUtil.getPageSize());
            List<User> userList = userService.selectUsersByPage(page);
            for (int i = 0; i < userList.size(); i++){
                row = sheet.createRow(i+1);
                User user = userList.get(i);
                // 第六步 创建单元格,并设置值
                row.createCell(0).setCellValue(user.getName());
                row.createCell(1).setCellValue(user.getAccount());
                row.createCell(2).setCellValue(user.getDept());
                row.createCell(3).setCellValue(user.getGender());
                row.createCell(4).setCellValue(user.getEmail());
                row.createCell(5).setCellValue(user.getMobile());
                row.createCell(6).setCellValue(user.getMemo());
            }
            // 第七步 输出Excel文件
            OutputStream out = response.getOutputStream();
            response.reset(); // 清空
            long curTime = System.currentTimeMillis();
            // 设置日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            String fileName = sdf.format(new Date());
            // 设置表头格式
            response.setHeader("Content-disposition","attachment;curTime=" + fileName + ".xls");
            response.setContentType("application/ms-excel");
            response.setCharacterEncoding("UTF-8");
            // 关闭流
            workbook.write(out);
            out.close();
    
            return "successExport";
    
        }

    (2)jsp界面形式

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
    <%
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("用户信息导出_"+ sdf.format(new Date())+".xls", "UTF-8"));
        response.setContentType("application/ms-excel");
        response.setCharacterEncoding("UTF-8");
    %>
    <table  width="100%" border="1" style="border: 1px #EEEEEE;font-size: 15px">
        <thead>
            <tr>
                <th>提交时间</th>
                <th>用户名</th>
                <th>账号</th>
                <th>所属部门</th>
                <th>性别</th>
                <th>电子邮箱</th>
                <th>电话</th>
                <th>备注</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${requestScope.list}" var="list">
                <tr>
                    <td>${list.name}</td>
                    <td>${list.account}</td>
                    <td>${list.dept}</td>
                    <td>
                        <c:if test="${list.gender == 'true'}">男</c:if>
                        <c:if test="${list.gender == 'false'}">女</c:if>
                    </td>
                    <td>${list.dept}</td>
                    <td>${list.email}</td>
                    <td>${list.mobile}</td>
                    <td>${list.memo}</td>
                </tr>
            </c:forEach>
        </tbody>
    </table>
    

    最主要是这几句话:

    <%
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("用户信息导出_"+ sdf.format(new Date())+".xls", "UTF-8"));
        response.setContentType("application/ms-excel");
        response.setCharacterEncoding("UTF-8");
    %>

     

    展开全文
  • 这里是通过jxl实现对excel的导入导出的,可以动态创建本地excel,读取本地excel,写入excel。 只需导入jxl.jar包即可; 基本操作: 一:创建本地excel: 数据,通过输出流输出到客户端下载 public static void ...

    这里是通过jxl实现对excel的导入导出的,可以动态创建本地excel,读取本地excel,写入excel。

    只需导入jxl.jar包即可;

    基本操作:

    一:创建本地excel:
    数据,通过输出流输出到客户端下载
    public static void createExecel(HttpServletRequest request,HttpServletResponse response,String fileName){
    OutputStream os=null;
    try {
    os=response.getOutputStream();
    response.reset();
    response.setCharacterEncoding(“utf-8”);
    response.setHeader(“Content-Disposition”, “attachment;filename=”+fileName);
    response.setContentType(“application/msexcel”);
    //创建工作薄
    WritableWorkbook wwb=Workbook.createWorkbook(os);
    //创建新的一页
    WritableSheet sheet=wwb.createSheet(“First sheet”, 0);
    //创建要显示的内容,第一个参数为列,第二个参数为行,第三个参数为内容
    Label xuexiao=new Label(0,0,“学校”);
    sheet.addCell(xuexiao);
    Label zhuanye=new Label(1,0,“专业”);
    sheet.addCell(zhuanye);
    Label xuexiao1=new Label(0,1,“清华大学”);
    sheet.addCell(xuexiao1);
    Label zhuanye1=new Label(1,1,“软件工程”);
    sheet.addCell(zhuanye1);
    //把创建的内容写入输出流,并关闭
    wwb.write();
    wwb.close();
    os.close();
    } catch (Exception e) {
    e.printStackTrace();
    }

    二:创建带有 样式的EXECEL
    //创建带有 样式的EXECEL,添加数据,通过输出流输出到客户端下载
    public static void createStyleExecel(HttpServletRequest request,HttpServletResponse response,String fileName){
    OutputStream os=null;
    try {
    os=response.getOutputStream();
    response.reset();
    response.setCharacterEncoding(“utf-8”);
    response.setHeader(“Content-Disposition”, “attachment;filename=”+fileName);
    response.setContentType(“application/msexcel”);
    //创建工作薄
    WritableWorkbook wwb=Workbook.createWorkbook(os);
    //创建新的一页
    WritableSheet sheet=wwb.createSheet(“First sheet”, 0);
    //构造表头,合并单元格,第一个参数是起始列,第二个参数是起始行,第三个参数是终止列,第四个参数是终止行
    sheet.mergeCells(0, 0, 1, 0);
    //设置字体为Arial,字号为10,黑体显示
    WritableFont wf=new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);
    //生成一个单元格样式控制对象
    WritableCellFormat wcf=new WritableCellFormat(wf);
    //单元格的内容水平方向上居中
    wcf.setAlignment(jxl.format.Alignment.CENTRE);
    //单元格的内容垂直方向上居中
    wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
    //创建要显示的内容,第一个参数为列,第二个参数为行,第三个参数为内容
    Label title=new Label(0,0,“学校专业信息表”,wcf);
    //设置第一行的高度
    sheet.setRowView(0,600,false);
    sheet.addCell(title);

    				WritableFont wf1=new WritableFont(WritableFont.ARIAL);
    				wf1.setColour(Colour.GOLD);//设置字体颜色
    				WritableCellFormat wcf1=new WritableCellFormat(wf1);
    				
    				
    				Label fd=new Label(0,1,"学校",wcf1);
    				sheet.addCell(fd);				
    				Label be=new Label(1,1,"专业",wcf1);
    				sheet.addCell(be);				
    				Label rq=new Label(0,2,"清华大学");
    				sheet.addCell(rq);
    				Label rq1=new Label(1,2,"软件工程");
    				sheet.addCell(rq1);				
    				
    				//把创建的内容写入输出流,并关闭
    				wwb.write();
    				wwb.close();
    				os.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    			
    		}
    

    三:创建excel,从数据库读取数据写入excel
    //创建EXECEL,从数据库导入数据,输出到客户端下载
    public static void createExecelData(HttpServletRequest request,HttpServletResponse response,StudentService studentService,String fileName){
    OutputStream os=null;
    try {
    os=response.getOutputStream();
    response.reset();
    response.setCharacterEncoding(“utf-8”);
    response.setHeader(“Content-Disposition”, “attachment;filename=”+fileName);
    response.setContentType(“application/msexcel”);
    //创建工作薄
    WritableWorkbook wwb=Workbook.createWorkbook(os);
    //创建新的一页
    WritableSheet sheet=wwb.createSheet(“First sheet”, 0);
    //创建要显示的内容,第一个参数为列,第二个参数为行,第三个参数为内容
    Label studentId=new Label(0,0,“ID”);
    sheet.addCell(studentId);
    Label studentName=new Label(1,0,“姓名”);
    sheet.addCell(studentName);
    List students=studentService.findByHq(“from Student s”, null);
    for(int i=0;i<students.size();i++){
    studentId=new Label(0,i+1,students.get(i).getStudentId()+"");
    studentName=new Label(1,i+1,students.get(i).getStudentName());
    sheet.addCell(studentId);
    sheet.addCell(studentName);
    }

    			//把创建的内容写入输出流,并关闭
    			wwb.write();
    			wwb.close();
    			os.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    }
    四:读取本地EXECEL文件数据		
    

    //读取本地EXECEL文件数据
    public static void readExcel(StudentService studentService,String filePath){
    //创建只读Workbook对象
    Workbook wb=null;
    try {
    InputStream is=new FileInputStream(filePath);
    wb=Workbook.getWorkbook(is);
    //创建sheet表,sheet下标从0开始
    Sheet sheet=wb.getSheet(0);
    //获取sheet表的总列数
    int cols=sheet.getColumns();
    System.out.println(“列数:”+cols);
    //获取sheet表的总行数
    int rows=sheet.getRows();
    System.out.println(“行数:”+rows);
    //遍历每个单元格
    List students=new ArrayList();
    for(int i=1;i<rows;i++){
    Student s=new Student();
    for(int j=0;j<cols;j++){
    Cell cell=sheet.getCell(j,i);
    System.out.println((i+","+j+":")+cell.getContents());
    if(j==0){
    s.setStudentId(Integer.valueOf(cell.getContents()));
    }else{
    s.setStudentName(cell.getContents());
    }
    }
    students.add(s);
    }
    studentService.saveBatch(students);
    System.out.println(“batch ok”);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    五 :实现通过jsp导入数据,到数据库:
    分两步实现,先把文件上传到服务器本地,再读取本地excel文件



    public String executeImport(){
    HttpServletRequest request=ServletActionContext.getRequest();
    HttpServletResponse response=ServletActionContext.getResponse();
    //首先将文件上传至服务器 f:\temp目录
    InputStream is=null;
    OutputStream os=null;
    try {
    System.out.println(“in upload”);
    is=new FileInputStream(file);
    path=“F:\temp\”+fileFileName;
    os=new FileOutputStream(new File(path));
    byte[] b=new byte[1024];
    int num;
    while((num=is.read(b))!=-1){
    os.write(b, 0, num);
    os.flush();
    }

    	} catch (Exception e) {
    		e.printStackTrace();
    	}finally{
    		try {
    			os.close();
    			is.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    		e.printStackTrace();
    		}
    	}
    	//从服务器读取Execel
    	ExcelUtil.readExcel(studentService,"F:\\temp\\"+fileFileName);
    	System.out.println("导入 execel ok");
    	
    	return "all";
    }
    

    六 导出excel
    导出

    public String executeExport(){
    HttpServletRequest request=ServletActionContext.getRequest();
    HttpServletResponse response=ServletActionContext.getResponse();
    // ExcelUtil.createExecel(request, response,fileName);
    ExcelUtil.createExecelData(request, response,studentService,fileName);
    // ExcelUtil.createStyleExecel(request, response,fileName);
    System.out.println(“导出 execel ok”);
    return null;
    }


    展开全文
  • 外部数据导入导出

    2018-12-27 19:34:45
    复杂 Excel 表格导入导出的最简方法 Java 中如何使用 SQL 查询文本 Java 嵌入 SPL 轻松实现 Excel 文件合并 10 行代码提取复杂 Excel 数据 学会这些“套路”,excel 合并汇总都不是事 文本导出的方方面面 自动...
  • 数据导入导出

    2018-06-23 15:37:02
    数据导入导出是指SQL Server数据库系统与外部系统之间进行数据交换的操作。导入数据是草外部数据源中查询或指定数据,并将其插入到SQL Server的数据表中的过程,也就是说把其他系统的数据引入到SQL Server的数据库中...
  • oracle11g数据库导入导出方法教程

    万次阅读 多人点赞 2018-03-04 15:03:09
    oracle11g数据库导入导出: ①:传统方式——exp(导出)和(imp)导入: ②:数据泵方式——expdp导出和(impdp)导入; ③:第三方工具——PL/sql Develpoer;一、什么是数据库导入导出? oracle11g数据库的导入/导出,...
  • Java 数据导入导出

    千次阅读 2018-05-09 16:57:04
    之前在博客中有一篇是利用POI封装的一个Excel导入导出的框架,由于最近自己也在弄。只是封装的框架用不上,因为字段这些都是动态生成的,没有实体类加注解,所以重新做了一个,比较简单。 本来不太喜欢把介绍什么...
  • oracle之——oracle数据库数据导入导出步骤(入门)

    万次阅读 多人点赞 2017-04-18 16:38:59
    oracle数据库数据导入导出步骤(入门)说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp命令导入导出,避免第三方工具...
  • 数据库的导入导出

    万次阅读 2018-07-13 02:24:48
    1、首先linux 下查看mysql相关目录whereis mysqlmysql: /usr/bin/mysql---- mysql的运行路径 /etc/mysql /usr/lib/mysql----- mysql的安装路径/usr/bin/X11/mysql /usr/share/mysql/usr/share/man/man1/mysql.1.gz...
  • MongoDB数据导入导出

    千次阅读 2018-12-27 17:09:29
    导出数据: 1.导出为json格式文件:mongoexport -d &amp;amp;amp;lt;数据库名称&amp;amp;amp;gt; -c &amp;amp;amp;lt;collection名称&amp;amp;amp;gt; -o &amp;amp;amp;lt;输出文件名称&amp...
  • mysql数据导入导出方法总结

    万次阅读 2016-11-03 09:56:22
    一、将数据导入到指定的数据库 第一种导入方式: (linux下和Windows 下语法是一样的,只是路劲的书写方式不同而已)  1、创建一个空数据库  2、进入MySQL安装目录bin下  3、导入命令 mysql -uroot –p...
  • hbase数据导入导出

    千次阅读 2018-12-05 17:53:23
    hbase数据导入 将本地文件(test.csv)上传到hdfs的根目录下,然后导入数据到hbase 1.本地写一个文件进行测试,文件名为test.csv,内容如下: 2.将文件上传到Hadoop 3.查看是否上传成功(文件存在,表示成功) ...
  • Sqoop进行数据导入导出

    千次阅读 2017-05-25 14:34:33
    Sqoop是用来进行数据导入导出的工具,一般用在hadoop这个框架中,常用的应用场景有将mysql数据库中的数据导入HDFS或者Hive、Hbase,或者从后者中导出到关系型数据库中,下面将进行几段代码的演示导入和导出的过程。...
  • 使用PLSQL进行Oracle数据导入导出

    万次阅读 2018-04-04 17:07:28
    1. 导出格式介绍 ① Dmp格式:.dmp是二进制文件,可跨平台,还能包含权限,效率好,  ② Sql格式:.sql格式的文件,可用文本编辑器查看,通用性比较好,效率不如第一种,适合小数据导入导出。尤其注意的是表中...
  • zookeeper数据导入导出

    千次阅读 2019-01-04 20:13:14
    https://www.ddkiss.com/archives/121.html
  • Kafka数据导入导出

    千次阅读 2017-10-24 09:45:52
    用命令行方式读写 Kafka 玩玩还行,真正投入实际使用时,往往需要把数据导入到 Kafka 或导出 Kafka 数据到本地文件中。这里我们学习一下怎么实现这个功能。   先创建一个本地源数据文件:   ...
  • greenplum数据导入导出

    千次阅读 2019-05-29 10:31:40
    一、数据导入 greenplum数据导入有五种方式: 1. insert:通过sql直接插入数据 2. copy:通过master节点加载,无法实现并行高效数据加载 copy tablename from '/home/../test.cvs' with delimiter ','; 3...
  • 数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp命令导入导出,避免第三方工具版本差异引起的问题,同时效率更高,但特别注意:...
  • neo4j数据导入导出

    千次阅读 2018-11-01 07:27:22
    执行数据导出命令 ./neo4j-admin dump --database=graph.db --to=/soft/graph.db.dump 执行数据导入命令 neo4j-admin load --from=/soft/graph.db.dump --database=graph.db --force  

空空如也

1 2 3 4 5 ... 20
收藏数 254,333
精华内容 101,733
关键字:

数据导入导出