中企动力 > 商学院 > java将excel导入数据库中
  • ?

    EXCEL玩转数据库,8种技巧,几十种功能,终于被整合一起了

    马汝燕

    展开

    前言:

    在职场报表中,EXCEL的魔法,可以说无处不在,是一项每个人必须掌握的技能,但是在EXCEL所有的函数之中,有一种函数,称之为【数据库函数】,高效,运行速度快,专门为大数据提供,却很少为人知

    收藏+转发,传播知识,是一种美德

    函数解释

    数据库函数均有三个相同的参数:database、field 和 criteria。这些参数指向数据库函数所使用的工作表区域。其中参数 database 为工作表上包含数据清单的区域。参数 field 为需要汇总的列的标志。参数 criteria 为工作表上包含指定条件的区域。写法为=(database、field,criteria)

    本篇主要介绍DGET、dcount、daverage、dmax、dmin 5个函数,套路完全一致。

    特别提醒

    这是一个让人又爱又恨的函数,爱,是因为这个函数,处理数据高效,快速。

    恨,是因为如果不知道原理,会出大问题的

    经典应用:

    用法1:以关键词开头的处理

    当我们在第三个参数,如实例,输入A的时候, 实际上,计算的是以A开头的所有物料的库存DSUM函数,计算以A开头的所有库存的和dcount函数,计算以A开头的物料的个数dmax函数,计算以A开头的物料的库存的最大值dmin函数,计算以A开头的物料的库存的最小daverage函数,计算以A开头的物料的库存的平均值特别提醒,是以A开头,不是单元格值等于A!!!!在第二个参数,我们这里输入的是2,是因为返回的值,在条件区域的第二列,当然我们可以直接输入B2,就是列号也是可以的用法2:不以A为结尾,的符合条件的值,主要为中间,或是首字母为A,如果末尾为A,只要中间有A这个字符,也是符合条件的

    用法3:包含A的所有符合条件的个数

    用法4:和用法3一样,为包含A的符合条件的个数

    用法5:第二个字符为A的符合条件的个数,且字符长度大于等于3,因为一个问号,代表一个字符

    用法6:以B开头的符合条件的值,因为没有,所以都为0

    用法7:

    这里输入的是,先切换到英文,而后输入单引号',而后输入=A,意思是单元格值完全等于A的符合条件的个数,所以只有一个单元格

    用法8:

    第二个字符为A,并且长度等于3的符合条件的值的处理

    数据库函数,使用方法,就介绍完了.

  • ?

    一起来学大数据|Java与数据库之间的连接JDBC

    诗霜

    展开

    昨天我们看了数据库的使用,只不过那都是我们手工去输入的数据,今天我们用java来实现对数据库的连接。

    JDBC简介

    JDBC就是java 数据库连接,是java中的API,我们将用它来执行SQL语句,除了我们平常的mysql数据库以外,jdbc还提供了统一的多种的数据库。

    如上图所示客户端通过jdbc API加载驱动后实现了数据的连接。接下来我们给出详细的步骤。

    入门程序

    我们先来学习一个简单的,首先我们新建的Java项目,其次是导入mysql的数据驱动jar包,jar可以在网上直接找一个,很方便,不需要太高版本的。

    准备工作都有做好了之后,我们就可开始啦~

    1,.注册驱动

    方式一

    方式二

    在这里我们建议使用第一种方式,第二种方式会多次注册数据库,因为Driver()中其实就封装了一个注册驱动的方法,我们在外面又注册一次。

    2.建立连接

    我们通过上述的语句实现连接数据库,数据库对应写上数据库的名字,在后面将自己的数据库的用户名和密码因为补上。第二步就结束了。

    3.获取执行sql语句的statement

    4.执行sql语句的增删改查

    在上面图片中,我们一般将sql单独拿出来,赋值给sql,方便操作。

    5.如果是查询语句,就会有结果集返回,我们对其进行处理。

    6.释放数据库的资源

    按顺序依次关闭数据库的资源,防止资源的恶意占有。

    主要接口或类

    ---DriverManger---

    作用

    a、注册驱动

    b、获取与数据库的链接

    改进注册驱动:

    DriverManager.registerDriver(new com.mysql.jdbc.Driver());

    缺点:严重依赖具体的驱动类;会导致驱动被注册2次。

    替代方案:Class.forName("com.mysql.jdbc.Driver");

    获取与数据库的链接

    DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm", "root", "hang");

    ---Connection---

    我们知道所有和数据库之间的连接我们都是通过链接的方式进行的,如果我们想要对数据库进行操作,我们就要从连接的对象中获取可以执行数据库的statement对象,实现我们的操作。

    ---statement---

    ---PreparedStatement---

    我们在这里,能用PreparedStatement就不要使用Statement,上面已经很明确了PreparedStatement的优点。

    ---ResultSet---

    作用:

    代表者查询语句的查询结果集

    上面就是对java连接数据库的简单介绍,下篇文章我们就会对上述的代码进行优化,解决代码中的硬编码问题,以及代码的冗余问题,我们还引入连接池强化数据连接速率。

    有帮助到大家的话,关注支持一下~

    感谢坚持关注的朋友

    世界很大,幸好有你

    欢迎在评论区留下你的问题或困惑,我将每天与你分享我的观点和心得。

    聚焦最新科技咨讯,探寻未来智能领域,我是女陶。

  • ?

    SpreadJS ExcelIO实现服务器端Excel导入导出

    白树根

    展开

    SpreadJS在V10版本后推出了纯前端的Excel导入导出,这个功能可以很方便的实现客户端的Excel导入导出,但是如果用户需要导入导出到浏览器端又该怎么办呢?其实纯前端的Excel导入导出同样可以实现服务器端的Excel导入导出。下面让我们来看一下是如何实现的:

    本示例的后端使用JAVA语言,通过SpreadJS的前端导出导出与JAVA后端结合,实现分从服务器端导入Excel与导出Excel保存至服务器端这两个功能:

    从服务器端导入Excel:

    这部分使用纯前端实现,纯前端实现有一个弊端就是,浏览器没有权限访问服务器上工程目录以外的路径,所以需要将服务器端的Excel放入工程目录下。然后下载到前端直接打开,核心代码如下:

    导出Excel保存至服务器端:

    这部分使用前端导出功能与后端java结合的方式来实现,首先通过前端Excel导出,生成导出文件,然后通过formdata来承载导出文件,之后通过ajax将formdata传至后端java。后端java使用文件操作将文件保存至服务器端。

    这里有以下需要注意的地方:

    formdata没有办法改变enctype,而我们需要的用entype为multipart/form-data类型的form来承载导出文件。这里需要在jsp页面上创建一个空的form,并将其entype设置为multipart/form-data:

    之后js中只需要初始化一个该form的formdata实例即可:

    var fd = new FormData(document.forms.namedItem("myform"));

    以上就是核心的部分代码以及原理。

    了解更多

    SpreadJS是 Spread 表格开发系列产品之一。该产品是葡萄城公司出品的一系列功能和 Excel 类似的表格工具,支持桌面、Web 和移动平台开发,用于在应用系统中实现 Excel 导入导出、表格数据录入和编辑等交互功能,并提供灵活的定制能力和丰富的数据可视化效果。

    Spread 是目前市面上最接近 Excel 的表格开发工具,无论是界面、函数还是布局,都与 Excel 高度接近,正被华为、东软、中国平安、河海大学、中通快递、普华永道、魔方网表、思源软件等企业应用于项目开发中。

    除了纯前端的SpreadJS,该系列产品还包括 .NET 平台可用的Spread Studio,和服务器端批量操作Excel的Spread表格组件,敬请登陆官网了解更多:http://gcpowertools/

    关于葡萄城

    葡萄城成立于1980年,是全球最大的控件提供商,世界领先的企业应用定制工具、企业报表和商业智能解决方案提供商,为超过75%的全球财富500强企业提供服务。葡萄城于1988年在中国设立研发中心,在全球化产品的研发过程中,不断适应中国市场的本地需求,并为软件企业和各行业的信息化提供优秀的软件工具和咨询服务。

  • ?

    PHP快速导入数据到数据库

    温醉薇

    展开

    今天一朋友遇到将excel数据导入到mysql数据库, 20多万条的数据导入到mysql需要两分多钟,老板认为这个速度太慢了,于是我们就一起想办法,最终把时间缩短到13秒左右, 这里把解决问题的经过给大家做个分享.

    两分钟是这样的: 用phpexcel读取文件,然后通过foreach循环使用tp的插入数据库方法

    测试1: 读取phpexcel, 然后做个循环,不插入数据库就需要 1分多钟,于是就意识到读取 excel太花时间,那么有没有更好的文件可以读取呢

    测试2: 通过搜索,可以通过PHP直接读取csv格式的文件,于是,换成 csv的文件读取,时间少了一半,但仍然觉得时间太久

    测试3: tp插入数据库的方法比较花时间,然后换成原来 php连接插入数据库, 时间再次所短一半,这个时候还需要 30 多秒,能不能再减少了

    测试4: 思考:既然循环需要时间,那么是否可以大批量插入呢,经过搜索,原来sql语句还可以这样写:

    测试5: 把20多万分成20多次分批导入,时间再次缩短了很多,最终 13秒 搞定[本人电脑配置一般,电脑好应该会再快一些]

    代码如下:

    南昌雅腾教育专注php软件开发+web前端开发技术培训

    小班现场面授+技术总监手把手辅导+理论与企业项目实战结合

    转行零基础、4个月、包教会、推荐就业!

    学一技之长,有核心竞争力,实现高薪就业!

  • ?

    集算器协助java处理多样性数据源之Excel

    夜梅

    展开

    Java程序员读取和计算excel的程序一般要使用poi或其它开源包,这些开源包对编程的支持较为底层,整体学习成本和操作复杂度都很高。使用集算器辅助java处理excel文件就可以避免这些事务。

    下面通过一个例子看一下具体作法:从Excel文件orders.xls中读取订单信息,找出2010年1月1日(含)之后,SELLERID等于18的订单。orders.xls的内容如下:

    实现的思路是:用Java程序调用集算器脚本,读取和计算excel文件中的数据,之后将结果以ResultSet的方式返回给Java程序。由于集算器支持动态表达式解析和求值,使得Java程序可以像使用sql那样,灵活的处理数据。

    首先,程序员可以将条件“2010年1月1日(含)之后,并且SELLERID等于18的订单。”作为参数where传递给esProc程序,如下图:

    where是个字串,其值为:ORDERDATE>=date(2010,1,1) && SELLERID==18。

    esProc的程序代码如下:

    A2:按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A1.select(ORDERDATE>=date(2010,1,1) && SELLERID==18)。A1:定义一个file对象,导入excel数据。esProc的集成开发环境可以直观的显示出导入的数据,如上图右边部分。importxls函数也可以读写xlsx文件,它会根据文件扩展名自动判断excel的版本。

    A3:将符合条件的结果集返回给java。如果需要将结果写入另外一个excel文件,只要将A3单元格改为:=file("D:/file/orders_result.xls").exportxls@t(A2)。

    过滤条件发生变化时不用改变程序,只需改变where参数即可。例如,条件变为:2010年1月1日(含)之后,并且SELLERID等于18的订单,或者CLIENT等于PWQ的订单。Where的参数值可以写为:CLIENT=="PWQ"||ORDERDATE>=date(2010,1,1) && SELLERID==18。执行之后,A2中的结果集如下图:

    在Java程序中使用esProc JDBC调用这段程序获得结果的代码如下:(将上述esProc程序保存为test.dfx):

    //建立esProc jdbc连接

    Class.forName("com.esproc.jdbc.InternalDriver");

    con= DriverManager.getConnection("jdbc:esproc:local://");

    //调用esProc程序(存储过程),其中test是dfx的文件名

    com.esproc.jdbc.InternalCStatementst =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test(?)");

    //设置参数

    st.setObject(1,"ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\"");//执行esProc存储过程

    ResultSet set =st.executeQuery();

    对于代码较简单的脚本,还可以把代码直接写在调用集算器JDBC的Java程序中,而不必专门编写脚本文件(test.dfx):

    ResultSet set = st.executeQuery(

    "=file(\"D:/file/orders.xls\").importxls@t().select(ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\")");

    这段Java代码直接调用了集算器的一句脚本:从Excel文件中取得数据,并按照指定的条件过滤。

  • ?

    java连接mysql数据库jar包怎么导入?

    肯尼

    展开

      工具:

      mysql

      jdk1.7

      方法/步骤

    1. 所有的jar包都是放到web工程lib目录下,mysql-connector-java-5.1.26-bin.jar也是一样,把该JAR包拷贝到lib目录下即可

    2. 用jdbc直接链接mysql代码如下

    3. 程序正常执行后,如果可以查询到下图所示的例子,证明jar包导入及代码是没有问题的


    (本文内容由百度知道网友m2ah贡献)

  • ?

    一行代码完成Java的Excel读写

    蔺藏鸟

    展开

    前段时间在 github 上发现了阿里的 EasyExcel 项目,觉得挺不错的,就写了一个简单的方法封装,做到只用一个函数就完成 Excel 的导入或者导。刚好前段时间更新修复了一些 BUG,就把我的这个封装分享出来,请多多指教。

    附上源码:

    https://github/HowieYuan/easyexcel-method-encapsulation

    EasyExcel

    EasyExcel 的 github 地址:

    https://github/alibaba/easyexcel

    EasyExcel 的官方介绍:

    可以看到 EasyExcel 最大的特点就是使用内存少,当然现在它的功能还比较简单,能够面对的复杂场景比较少,不过基本的读写完全可以满足。

    一. 依赖

    首先是添加该项目的依赖,目前的版本是 1.0.2。

    com.alibabaeasyexcel1.0.2

    二. 需要的类

    1. ExcelUtil

    工具类,可以直接调用该工具类的方法完成 Excel 的读或者写。

    2. ExcelListener

    监听类,可以根据需要与自己的情况,自定义处理获取到的数据,我这里只是简单地把数据添加到一个 List 里面。

    publicclassExcelListenerextendsAnalysisEventListener {//自定义用于暂时存储data。//可以通过实例获取该值private List datas = new ArrayList<>();/** * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据 */ @Overridepublicvoidinvoke(Object object, AnalysisContext context) {//数据存储到list,供批量处理,或后续自己业务逻辑处理。 datas.add(object);//根据自己业务做处理 doSomething(object); }privatevoiddoSomething(Object object) { } @OverridepublicvoiddoAfterAllAnalysed(AnalysisContext context) {/* datas.clear(); 解析结束销毁不用的资源 */ }public List getDatas() {return datas; }publicvoidsetDatas(List datas) {this.datas = datas; }}

    3. ExcelWriterFactroy

    用于导出多个 sheet 的 Excel,通过多次调用 write 方法写入多个 sheet。

    4. ExcelException

    捕获相关 Exception。

    三. 读取 Excel

    读取 Excel 时只需要调用 ExcelUtil.readExcel() 方法:

    @RequestMapping(value = "readExcel", method = RequestMethod.POST)public Object readExcel(MultipartFile excel) {return ExcelUtil.readExcel(excel, new ImportInfo());}

    其中 excel 是 MultipartFile 类型的文件对象,而 new ImportInfo() 是该 Excel 所映射的实体对象,需要继承 BaseRowModel 类,如:

    publicclass ImportInfo extends BaseRowModel {@ExcelProperty(index = 0)privateString name;@ExcelProperty(index = 1)privateString age;@ExcelProperty(index = 2)privateString email;/* 作为 excel 的模型映射,需要 setter 方法 */publicString getName() {return name; }publicvoid setName(String name) {this.name = name; }publicString getAge() {return age; }publicvoid setAge(String age) {this.age = age; }publicString getEmail() {return email; }publicvoid setEmail(String email) {this.email = email; }}

    作为映射实体类,通过 @ExcelProperty 注解与 index 变量可以标注成员变量所映射的列,同时不可缺少 setter 方法。

    四. 导出 Excel

    1. 导出的 Excel 只拥有一个 sheet

    只需要调用 ExcelUtil.writeExcelWithSheets() 方法:

    @RequestMapping(value = "writeExcel", method = RequestMethod.GET)publicvoidwriteExcel(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName = "第一个 sheet"; ExcelUtil.writeExcel(response, list, fileName, sheetName, new ExportInfo()); }

    fileName,sheetName 分别是导出文件的文件名和 sheet 名,new ExportInfo() 为导出数据的映射实体对象,list 为导出数据。

    对于映射实体类,可以根据需要通过 @ExcelProperty 注解自定义表头,当然同样需要继承 BaseRowModel 类,如:

    publicclass ExportInfo extends BaseRowModel {@ExcelProperty(value = "姓名" ,index = 0)privateString name;@ExcelProperty(value = "年龄",index = 1)privateString age;@ExcelProperty(value = "邮箱",index = 2)privateString email;@ExcelProperty(value = "地址",index = 3)privateString address;}

    value 为列名,index 为列的序号。

    如果需要复杂一点,可以实现如下图的效果:

    对应的实体类写法如下:

    publicclass MultiLineHeadExcelModel extends BaseRowModel {@ExcelProperty(value = {"表头1","表头1","表头31"},index = 0)privateString p1;@ExcelProperty(value = {"表头1","表头1","表头32"},index = 1)privateString p2;@ExcelProperty(value = {"表头3","表头3","表头3"},index = 2)private int p3;@ExcelProperty(value = {"表头4","表头4","表头4"},index = 3)private long p4;@ExcelProperty(value = {"表头5","表头51","表头52"},index = 4)privateString p5;@ExcelProperty(value = {"表头6","表头61","表头611"},index = 5)privateString p6;@ExcelProperty(value = {"表头6","表头61","表头612"},index = 6)privateString p7;@ExcelProperty(value = {"表头6","表头62","表头621"},index = 7)privateString p8;@ExcelProperty(value = {"表头6","表头62","表头622"},index = 8)privateString p9;}

    2. 导出的 Excel 拥有多个 sheet

    调用 ExcelUtil.writeExcelWithSheets() 处理第一个 sheet,之后调用 write() 方法依次处理之后的 sheet,最后使用 finish() 方法结束。

    publicvoidwriteExcelWithSheets(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName1 = "第一个 sheet"; String sheetName2 = "第二个 sheet"; String sheetName3 = "第三个 sheet"; ExcelUtil.writeExcelWithSheets(response, list, fileName, sheetName1, new ExportInfo()) .write(list, sheetName2, new ExportInfo()) .write(list, sheetName3, new ExportInfo()) .finish();}

    write 方法的参数为当前 sheet 的 list 数据,当前 sheet 名以及对应的映射类。

    扩展阅读

    代码整洁之道|最佳实践小结

    Javascript 将 HTML 页面生成 PDF 并下载

    Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    来源:https://juejin.im/post/5ba320546fb9a05d0b14304b

    文章来源网络,版权归作者本人所有,如侵犯到原作者权益,请与我们联系删除

  • ?

    整理关于java写入内容到excel的例子供大家参考

    雁丝

    展开

    1POI jar简介

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    2POI jar下载

    poi下载地址:https://apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz

    下载之后把压缩包解压,然后在项目里面引用解压文件夹里面的jar

    3新建ReadExcelTest java project,引入poi相关jar

    4创建一个WriteExcel java类,编写代码,写入excel里面

    package test;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.OutputStream;

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    import org.apache.poi.ss.usermodel.Cell;

    import org.apache.poi.ss.usermodel.Row;

    import org.apache.poi.ss.usermodel.Sheet;

    import org.apache.poi.ss.usermodel.Workbook;

    import org.apache.poi.xssf.usermodel.XSSFWorkbook;

    public class WriteExcel {

    private static final String EXCEL_XLS = "xls";

    private static final String EXCEL_XLSX = "xlsx";

    @SuppressWarnings("rawtypes")

    public static void writeExcel(List> dataList, int cloumnCount,

    String finalXlsxPath) {

    OutputStream out = null;

    try {

    // 获取总列数

    int columnNumCount = cloumnCount;

    // 读取Excel文档

    File finalXlsxFile = new File(finalXlsxPath);

    Workbook workBook = getWorkbok(finalXlsxFile);

    // sheet 对应一个工作页

    Sheet sheet = workBook.getSheetAt(0);

    /**

    * 删除原有数据,除了属性列

    */

    int rowNumber = sheet.getLastRowNum(); // 第一行从0开始算

    System.out.println("原始数据总行数,除属性列:" + rowNumber);

    for (int i = 1; i <= rowNumber; i++) {

    Row row = sheet.getRow(i);

    sheet.removeRow(row);

    }

    // 创建文件输出流,输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效

    out = new FileOutputStream(finalXlsxPath);

    workBook.write(out);

    * 往Excel中写新数据

    for (int j = 0; j < dataList.size(); j++) {

    // 创建一行:从第二行开始,跳过属性列

    Row row = sheet.createRow(j + 1);

    // 得到要插入的每一条记录

    Map dataMap = dataList.get(j);

    String name = dataMap.get("title_id").toString();

    String address = dataMap.get("title_name").toString();

    String phone = dataMap.get("title_name_en").toString();

    for (int k = 0; k <= columnNumCount; k++) {

    // 在一行内循环

    Cell first = row.createCell(0);

    first.setCellValue(name);

    Cell second = row.createCell(1);

    second.setCellValue(address);

    Cell third = row.createCell(2);

    third.setCellValue(phone);

    // 创建文件输出流,准备输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    if (out != null) {

    out.flush();

    out.close();

    } catch (IOException e) {

    System.out.println("数据汇入成功");

    * 判断Excel的版本,获取Workbook

    *

    * @param in

    * @param filename

    * @return

    * @throws IOException

    public static Workbook getWorkbok(File file) throws IOException {

    Workbook wb = null;

    FileInputStream in = new FileInputStream(file);

    if (file.getName().endsWith(EXCEL_XLS)) { // Excel 2003

    wb = new HSSFWorkbook(in);

    } else if (file.getName().endsWith(EXCEL_XLSX)) { // Excel 2007/2010

    wb = new XSSFWorkbook(in);

    return wb;

    * @param args

    public static void main(String[] args) {

    List> mapList = new ArrayList>();

    for(int k=0; k<100;k++){

    Map map = new HashMap();

    map.put("title_id", "title_id"+k);

    map.put("title_name", "title_name"+k);

    map.put("title_name_en", "title_name_en"+k);

    mapList.add(map);

    writeExcel(mapList, mapList.size(), "D:/360bizhi/readExcel.xlsx");

    5运行main进行测试,查看写入结果

    写入结果和预期是一样的,说明写入成功

    请大家多多关注我的头条号,谢谢大家

  • ?

    利用workbench将excel数据导入到MySQL中

    圣纳泽尔

    展开

    数据导入的方式(csv,txt之类)

    在MySQL中,数据导入的方式有两种方式

    通过第三方客户端导入(workbench)

    通过mysql client 方式导入

    通过mysql clinet的导入方式,相比第三方客户端导入的方式,效率会高点,但是类似workbench这种的,因为图形UI做的相对比较人性,研发人员在处理数据的过程中减少对指令的交互

    具体操作方法 准备数据(csv准备)

    当你的CSV数据准备好之后,需要有个点注意(由于导入容易碰到编码问题,所以在导入之前,需要使用notepade++将csv文件的编码转换成utf-8的编码方式[格式-->utf-8编码格式])然后保存 导入数据

    1.选中你需要导入的库的项

    2.选择需要导入的csv文件(也可以是json格式)

    3.由于csv中的字段并不是完整是所有表的字段,故此我们在这里新创建一张表(建议是先创建一张跟要同步的表一样字段属性的表先)

    4.留意导入的数据是否正确

    5.一直点NEXT即可完成

    总结

    需要注意的是:如果使用workbench导入的时候,如果数据量不大,可以使用这种方式,如果数据量比较庞大,建议直接通过命令行的方式会高效,其中一个最明显的特征就是如果导入大量数据的CSV,在workbench导入的时候,可能会卡死或者桌面终端无法操作,从而导致导入失败

  • ?

    Java实现文件批量导入导出实例(兼容xls,xlsx)

    穆随阴

    展开

    1、介绍

    java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下。

    目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出。另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了。

    2、POI使用详解

    2.1 什么是Apache POI?

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    2.2 POI的jar包导入

    本次讲解使用maven工程,jar包版本使用poi-3.14和poi-ooxml-3.14。目前最新的版本是3.16。因为3.15以后相关api有更新,部分操作可能不一样,大家注意下。

    2.3 POI的API讲解

    2.3.1 结构

    HSSF - 提供读写Microsoft Excel格式档案的功能。XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。HWPF - 提供读写Microsoft Word格式档案的功能。HSLF - 提供读写Microsoft PowerPoint格式档案的功能。HDGF - 提供读写Microsoft Visio格式档案的功能。

    2.3.2 对象

    本文主要介绍HSSF和XSSF两种组件,简单的讲HSSF用来操作Office 2007版本前excel.xls文件,XSSF用来操作Office 2007版本后的excel.xlsx文件,注意二者的后缀是不一样的。

    HSSF在org.apache.poi.hssf.usermodel包中。它实现了Workbook 接口,用于Excel文件中的.xls格式

    常用组件:HSSFWorkbook excel的文档对象HSSFSheet excel的表单HSSFRow excel的行HSSFCell excel的格子单元HSSFFont excel字体HSSFDataFormat 日期格式HSSFHeader sheet头HSSFFooter sheet尾(只有打印的时候才能看到效果)样式:HSSFCellStyle cell样式辅助操作包括:HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表

    XSSF在org.apache.xssf.usemodel包,并实现Workbook接口,用于Excel文件中的.xlsx格式

    常用组件:XSSFWorkbook excel的文档对象XSSFSheet excel的表单XSSFRow excel的行XSSFCell excel的格子单元XSSFFont excel字体XSSFDataFormat 日期格式和HSSF类似;

    2.3.3 两个组件共同的字段类型描述

    其实两个组件就是针对excel的两种格式,大部分的操作都是相同的。

    2.3.4 操作步骤

    以HSSF为例,XSSF操作相同。

    首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。

    3、代码操作

    3.1 效果图

    惯例,贴代码前先看效果图

    Excel文件两种格式各一个:

    代码结构:

    导入后:(我导入了两遍,没做校验)

    导出效果:

    3.2 代码详解

    这里我以Spring+SpringMVC+Mybatis为基础

    Controller:

    Service

    3.3 导出文件api补充

    大家可以看到上面service的代码只是最基本的导出。

    在实际应用中导出的Excel文件往往需要阅读和打印的,这就需要对输出的Excel文档进行排版和样式的设置,主要操作有合并单元格、设置单元格样式、设置字体样式等。

    3.3.1 单元格合并

    使用HSSFSheet的addMergedRegion()方法

    参数CellRangeAddress 表示合并的区域,构造方法如下:依次表示起始行,截至行,起始列, 截至列

    3.3.2 设置单元格的行高和列宽

    3.3.3 设置单元格样式

    1、创建HSSFCellStyle

    2、设置样式

    3、将样式应用于单元格

    3.3.4设置字体样式

    1、创建HSSFFont对象(调用HSSFWorkbook 的createFont方法)

    2、设置字体各种样式

    3、将字体设置到单元格样式

    大家可以看出用poi导出文件还是比较麻烦的,等下次在为大家介绍下irport的方法。

    导出的api基本上就是这些,最后也希望上文对大家能有所帮助。

    学习Java的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群495273252,我们一起学Java!

  • java将excel导入数据库中