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

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. 关于MQ的几件小事(三)如何保证消息不重复消费

    1.幂等性 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.幂等函数,或 ...

  2. 时间都去哪儿了?开源一个统计iPhone上App运行时间和打开次数的小工具【iOS8已失效】

    如今,大家每天都有大量时间花在手机上,但是,大家有没有想过自己的时间都花在哪些App上了呢?相信很多人都有这样的需求,不过iOS系统本身并不能显示每个App的运行时间和次数,因此,本人写了这样一个小工 ...

  3. 如何使用.gitignore文件删除掉已经提交的文件

      如何使用.gitignore文件删除掉已经提交的文件 2018.06.06 22:13:38字数 96阅读 116 如果你的文件已经提交,而此时你才发现忘了添加.gitignore文件,不用担心, ...

  4. null和空的区别

    python中None和Null的区别 首先了解python对象的概念 python中,万物皆对象,所有的操作都是针对对象的. 那什么是对象?5是一个int对象,‘oblong’是一个str对象,异常 ...

  5. STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结

    文章结构: ——> 一.定时器基本介绍 ——> 二.普通定时器详细介绍TIM2-TIM5 ——> 三.定时器代码实例 一.定时器基本介绍  之前有用过野火的学习板上面讲解很详细,所以 ...

  6. nginx + php-fpm 搭建owncloud

    本文首发:https://www.cnblogs.com/somata/p/NgnixAndPhp-fpmBuildOwncloud.html 今天新研究的nginx,用owncloud来测试一下学的 ...

  7. ubuntu 修改环境变量(PATH)

    1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/ ...

  8. aiops相关

    AIOPS的能力框架 AIOps平台能力体系 AIOps 常见应用场景 按照时间来分 AIOPS实施的关键技术 1.数据采集(硬件,业务指标等) 2.数据预处理(特征工程) 3.数据可视化 4.数据存 ...

  9. 《hello--world团队》第四次作业:项目需求调研与分析

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验八 团队作业4:基于原型的团队项目需求调研与分析 团队名称 <hello--w ...

  10. DT6.0二次最后一次开发插件-手机端熊掌号定时提交

    今天写完这个,就是DT6.0最后开放的插件,因为群里的朋友需要,就写了一个适合DT6的手机端定时插件.不过个人还是喜欢7.0的版本,7.0的插件在上几期分享了,今天就不过多说了! 我这个是初成品,改善 ...