java读取excel⽂件数据导⼊mysql数据库这是我来公司的第⼆周的⼀个⼩学习任务,下⾯是实现过程:
1.建⽴maven⼯程(⽅便管理jar包)
在l导⼊ 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 Int("id");
String s_String("s_name");
String String("age");
String String("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 Workbook(new File("F:\\student.xls"));
Sheet Sheet(0);//表
int Columns();//得到所有的列
int Rows();//得到所有的⾏
System.out.println("表的列数:"+clos+" 表的⾏数:"+rows);
for (int i = 1; i < rows; i++) {
for (int j = 0; j < clos; j++) {
//第⼀个是列数,第⼆个是⾏数
String Cell(j++, i).getContents();//默认最左边编号也算⼀列所以这⾥得j++ String s_Cell(j++, i).getContents();
String Cell(j++, i).getContents();
String Cell(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(1));
}
}
运⾏主类:
package service;
import java.util.List;mysql下载jar包
import excel.DB;
import excel.Student;
public class TestExcelToDb {
public static void main(String[] args) {
//得到表格中所有的数据
List<Student> AllByExcel("F:\\student.xls");
DB db=new DB();
for (Student student : listExcel) {
int Id();
System.out.println(id);
if (!StudentService.isExist(id)) {
//不存在就添加
String sql="insert into student (id,s_name,age,address) values(?,?,?,?)";
String[] str=new String[]{id+"",S_name(),Age(),Address()+""};
db.AddU(sql, str);
}else {
//存在就更新
String sql="update student set s_name=?,age=?,address=? where id=?";
String[] str=new String[]{S_name(),Age(),Address()+"",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 = Name();
List<String> list = new ArrayList<String>();
//根据其名称获取后缀
String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
.substring(fileName.lastIndexOf(".") + 1);
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 = 0; i < rowLength; i++) {
StringBuffer sb = new StringBuffer();
for (int j = 0; j < result[i].length; j++) {
if(!"".equals(result[i][j]) && result[i][j].trim().length()>0){
sb.append(result[i][j]).append("##");
}else{
sb.append("@@").append("##");
}
}
String().endsWith("##")){
sb.String().length()-2, sb.toString().length());
}
System.out.String());
list.String());
}
return list;
}
然后根据上⾯在编写⼀个读取Excel2003和⼀个Excel2007的类就⾏了。以上是个⼈在测试编写后做的⼀点记录,有不对的地⽅望指正和见谅。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论