这是我来公司的第二周的一个小学习任务,下面是实现过程:

1.建立maven工程(方便管理jar包)


在pom.xml导入 jxl,mysql-connector 依赖

可以在maven仓库搜索

2.建立数据库连接类,数据库对应实体类

2.编写数据库表对应的实体类 ,get、set方法等

3.下面是编写读取excel文件的类 ,和运行主类

package service;

import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import jxl.Sheet;
import jxl.Workbook;
import excel.DB;
import excel.Student; public class StudentService {
/**
* 查询Student表中所有的数据
* @return
*/
public static List<Student> getAllByDb(){
List<Student> list=new ArrayList<Student>();
try {
DB db=new DB();
String sql="select * from student";
ResultSet rs= db.Search(sql, null);
while (rs.next()) {
int id=rs.getInt("id");
String s_name=rs.getString("s_name");
String age=rs.getString("age");
String address=rs.getString("address"); list.add(new Student(id, s_name, age,address));
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
} /**
* 查询指定目录中电子表格中所有的数据
* @param file 文件完整路径
* @return
*/
public static List<Student> getAllByExcel(String file){
List<Student> list=new ArrayList<Student>();
try {
Workbook rwb=Workbook.getWorkbook(new File("F:\\student.xls"));
Sheet rs=rwb.getSheet();//表
int clos=rs.getColumns();//得到所有的列
int rows=rs.getRows();//得到所有的行 System.out.println("表的列数:"+clos+" 表的行数:"+rows);
for (int i = ; i < rows; i++) {
for (int j = ; j < clos; j++) {
//第一个是列数,第二个是行数
String id=rs.getCell(j++, i).getContents();//默认最左边编号也算一列 所以这里得j++ String s_name=rs.getCell(j++, i).getContents();
String age=rs.getCell(j++, i).getContents();
String address=rs.getCell(j++, i).getContents(); System.out.println("id:"+id+" name:"+s_name+" sex:"+age+" address:"+address);
list.add(new Student(Integer.parseInt(id), s_name,age,address));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list; } /**
* 通过Id判断是否存在
* @param id
* @return
*/
public static boolean isExist(int id){
try {
DB db=new DB();
ResultSet rs=db.Search("select * from student where id=?", new String[]{id+""});
if (rs.next()) {
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
} public static void main(String[] args) { System.out.println(isExist()); } }

运行主类:

package service;

import java.util.List;

import excel.DB;
import excel.Student; public class TestExcelToDb {
public static void main(String[] args) {
//得到表格中所有的数据
List<Student> listExcel=StudentService.getAllByExcel("F:\\student.xls"); DB db=new DB(); for (Student student : listExcel) {
int id=student.getId();
System.out.println(id);
if (!StudentService.isExist(id)) {
//不存在就添加
String sql="insert into student (id,s_name,age,address) values(?,?,?,?)";
String[] str=new String[]{id+"",student.getS_name(),student.getAge(),student.getAddress()+""};
db.AddU(sql, str);
}else {
//存在就更新
String sql="update student set s_name=?,age=?,address=? where id=?";
String[] str=new String[]{student.getS_name(),student.getAge(),student.getAddress()+"",id+""};
db.AddU(sql, str);
}
}
}
}

数据库截图:[Excel数据表头要与数据库字段对应]

总结:以上是使用了 jxl实现的读取excel文件内容,并且将数据传到mysql,缺陷是:jxl仅支持EXCEL2003。

   要改进兼容2003和2007需要使用pol,要导入pol相关jar包

    pol 里面有有两个类是处理Excel2003 和Excel2007的

    HSSF-----2003,XSSF-----2007

下面是通过读取文件名判断该文件类型是03还是07的类方法。因为03和07很显然在文件后缀名就存在区别

/**
* 对外提供读取excel 的方法
* */
public static List<String> readExcel(File file) throws IOException {
String fileName = file.getName();
List<String> list = new ArrayList<String>();
//根据其名称获取后缀
String extension = fileName.lastIndexOf(".") == - ? "" : fileName
.substring(fileName.lastIndexOf(".") + );
String[][] result = null;
if ("xls".equals(extension)) {
result = read2003Excel(file);
} else if ("xlsx".equals(extension)) {
result = read2007Excel(file);
} else {
throw new IOException("不支持的文件类型");
}
int rowLength = result.length; for (int i = ; i < rowLength; i++) {
StringBuffer sb = new StringBuffer();
for (int j = ; j < result[i].length; j++) {
if(!"".equals(result[i][j]) && result[i][j].trim().length()>){
sb.append(result[i][j]).append("##");
}else{
sb.append("@@").append("##");
}
}
if(sb.toString().endsWith("##")){
sb.delete(sb.toString().length()-, sb.toString().length());
}
System.out.println(sb.toString());
list.add(sb.toString());
}
return list;
}

然后根据上面在编写一个读取Excel2003和一个Excel2007的类就行了。

以上是个人在测试编写后做的一点记录,有不对的地方望指正和见谅。

java读取excel文件数据导入mysql数据库的更多相关文章

  1. 将 excel文件数据导入MySQL数据库中

    第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:\city.txt 第四步:避免创 ...

  2. Excel表格数据导入Mysql数据库的方法

    1.使用Navicat 连接需要导入的数据库. 2.excel 列的名字最好和数据库的名字一致,便于我们直观的查看好理解.   第一步,先创建好表,和准备好对应的excel文件.在Navicat 中选 ...

  3. Excel表格数据导入MySQL数据库

    有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...

  4. java读取excel文件数据

    package com.smp.server.Ctrl; import java.io.File;import java.io.FileInputStream;import java.io.FileN ...

  5. java 读取excel 将数据插入到数据库

    import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Con ...

  6. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  7. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  8. 把execel表数据导入mysql数据库

    今天,是我来公司第二周的第一天. 作为新入职的实习生,目前还没适合我的实质项目工作,今天的学习任务是: 把execel表数据导入到mysql数据库,再练习下java操作JDBC. 先了解下execel ...

  9. Weka里如何将arff文件或csv文件批量导入MySQL数据库(六)

    这里不多说,直接上干货! 前提博客是 Weka中数据挖掘与机器学习系列之数据格式ARFF和CSV文件格式之间的转换(四) 1.将arff文件批量导入MySQL数据库 我在这里,arff文件以Weka安 ...

随机推荐

  1. VBA嵌套if语句

    一个If或ElseIf语句可以嵌套在另一个If或ElseIf语句中.内部的If语句是根据最外层的If语句执行的.这使得VBScript能够轻松处理复杂的条件. 语法 以下是VBScript中嵌套的If ...

  2. Arc Engine二次开发——弹窗进行属性查询

    在Arcmap中使用Sapefile格式的矢量数据时,经常会用到其属性查询的功能,弹出窗体然后用户鼠标点击或手动输入查询条件,进而查询到感兴趣的要素.在AE二次开发中也经常需要这个功能,于是在此记录整 ...

  3. 苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法

    一.引导用户走申请苹果的退款 1.告知用户新版本可以使用支付宝.微信支付,更划算 2.苹果可申请90天以内的退款,一般情况申请后48小时内就有反馈. 参考链接 https://jingyan.baid ...

  4. HTML&CSS基础-清除浮动

    HTML&CSS基础-清除浮动 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看浮动效果 1>.HTML源代码 <!DOCTYPE html> &l ...

  5. BIOS+MBR操作系统引导方式

    1. 主引导记录(Master Boot Record,缩写:MBR) 主引导记录又叫做主引导扇区,是计算机开机后启动操作系统时所必须要读取的硬盘首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)= ...

  6. vue-cli2 和vue-cli3

    vue-cli2 和vue-cli3 https://www.cnblogs.com/zhanvo/p/10963776.html <!DOCTYPE html> <html lan ...

  7. SpringBoot Kafka 整合集成 示例教程

    1.使用IDEA新建工程,创建工程 springboot-kafka-producer 工程pom.xml文件添加如下依赖: <!-- 添加 kafka 依赖 --> <depend ...

  8. kubbernetes Flannel网络部署(五)

    一.Flannel生成证书 1.创建Flannel生成证书的文件 [root@linux-node1 ~]# vim flanneld-csr.json { "CN": " ...

  9. Maven配置环境变量

    Windows: 1:新建系统M2_HOME变量,并把安装maven路径拷贝上去 ​ 2:配置path变量,并把maven路径拷贝上去,这次的maven路径到bin ​ 3:测试maven环境是否配置 ...

  10. 关于部署 Kafka 的一些所得

    前记 最近在做日志模块. 其中用到的日志信息传输的中间工具用的是的 Kafka,在自己的摸索中总是有一些问题的,在这里记录下来.  Kafka 环境搭建 首先是下载需要的安装软件. JDK.Zooke ...