java读取excel文件数据导入mysql数据库

时间:2021-07-06 11:52:18

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

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


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

java读取excel文件数据导入mysql数据库

可以在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数据表头要与数据库字段对应]

java读取excel文件数据导入mysql数据库

总结:以上是使用了 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. 项目一&colon;第四天 1、快递员的条件分页查询-noSession&comma;条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a&rpar;Jquery OCUpload上传文件插件使用 b&rpar;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. 第九章伪代码编程过程 The PseudoCode Programming Process

    目录: 1.创建类和子程序的步骤概述 2.伪代码 3.通过伪代码编程过程创建子程序 4.伪代码编程过程的替代方案 一.创建类和子程序的步骤概述 (1)创建一个类的步骤 1.创建类的总体设计 2.创建类 ...

  2. mysql无法插入中文字符解决

    1. 基于可维护的角度,虽然latin1没什么问题,但是还是尽量换成utf8或者gb系列 2. 出现乱码时: SHOW VARIABLES LIKE 'character%'SHOW VARIABLE ...

  3. LeetCode33 Search in Rotated Sorted Array

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  4. C&num;简单的加密类

    1.加密 public class EncryptHepler { // 验值 static string saltValue = "XXXX"; // 密码值 static st ...

  5. 进程控制块PCB学习

    参考这篇文章:http://blog.csdn.net/shuizhilan/article/details/6642040 PCB(process control block),进程控制块,是我们学 ...

  6. 第3章 Struts2框架--2、完整的Struts2框架应用实例

    1.建立一个Dynamic Web project,项目名:UserManager,把Struts2所必需的JAR复制到项目WEB-INF/lib目录下 2.修改web.xml文件,在web.xml文 ...

  7. python of zip moudle

    reprinted:http://www.cnblogs.com/beginman/archive/2013/03/14/2959447.html A. code talk is cheap ,sho ...

  8. 记一次 net 使用 data&period;oracleclient 使用错误

    前提: 公司除了领导和开发人员具有管理员权限,其他人员使用的都是域账号. 过程: 应要求开发一个 winfrom项目,使用data.oracleclient  本地开发,调试无误,放到服务器共享域用户 ...

  9. 微信小程序开发之模板

    一.简介 WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用. 定义模板 使用name属性,作为模板的名字.然后在<template/>内定义代码片段,如 ...

  10. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...