前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面和大家分享一下:
一.用java来将Excel表格中的数据转到mysql中
这是我们用的第一种方法,就是在java找你感谢个类,然后这个类会将Excel表格中的数据存储到内存里,然后再从内存中读出来插入到数据库中,但是要注意了,这里是存储到String[ ]数组里面,所以取出来的数据也是String类型,如果你的表里面有int类型的数据,那么你一定要将那一条取出来然后强制转换,如果你的数据表结构没有那么复杂,比较简单的话那么可以使用这种方法,如果字段的结构复杂那也可以使用,只不过要慢慢转,多写点代码,不怕累的同志可以试试.下面是我从网上查的代码:
1、添加POI jar包到项目的lib目录下
2、Excel文件目录:d://excel.xls
3、数据库字段为:num1 num2 num3 num4 num5 num6
4、数据库名:blog
5、表名:test
6、编写类:连接mysql的字符串方法、插入的方法、实体类
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class TestExcel {
//记录类的输出信息
static Log log = LogFactory.getLog(TestExcel.class);
//获取Excel文档的路径
public static String filePath = "D://excel.xls";
public static void main(String[] args) {
try {
// 创建对Excel工作簿文件的引用
HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath));
// 在Excel文档中,第一张工作表的缺省索引是0,
// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
HSSFSheet sheet = wookbook.getSheet("Sheet1");
//获取到Excel文件中的所有行数
int rows = sheet.getPhysicalNumberOfRows();
//遍历行
for (int i = 0; i < rows; i++) {
// 读取左上端单元格
HSSFRow row = sheet.getRow(i);
// 行不为空
if (row != null) {
//获取到Excel文件中的所有的列
int cells = row.getPhysicalNumberOfCells();
String value = "";
//遍历列
for (int j = 0; j < cells; j++) {
//获取到列的值
HSSFCell cell = row.getCell(j);
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value += cell.getNumericCellValue() + ",";
break;
case HSSFCell.CELL_TYPE_STRING:
value += cell.getStringCellValue() + ",";
break;
default:
value += "0";
break;
}
}
}
// 将数据插入到mysql数据库中
String[] val = value.split(",");
TestEntity entity = new TestEntity();
//现在开始数据转换啦!!!!!!*************************************************
double a = Double.parseDouble(val[0]);
long code = (long)a;
entity.setNum1(code);
entity.setNum2(val[1]);
entity.setNum3(val[2]);
entity.setNum4(val[3]);
entity.setNum5(val[4]);
entity.setNum6(val[5]);
TestMethod method = new TestMethod();
method.Add(entity);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我们的数据库实在是太复杂,所以这个方法bye-bye了!!!
二.手动进行Excel数据和MySql数据转换
这个方法也是从网上查到的,比第一种要简单一些,一个命令就搞定,下面copy给大家:
假如要把如图所示的Excel表格导入到MySql数据库中,如图:
![](https://i-blog.csdnimg.cn/blog_migrate/459c792ca62683718f49205dad3e6fde.bmp)
![](https://i-blog.csdnimg.cn/blog_migrate/b1f53b07a560e1f8a4992105794dd7f6.bmp)
![](https://i-blog.csdnimg.cn/blog_migrate/d896cefd737fb4ddb4c0416cf521b66a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b4a8f6e9ad9142d2c33f7bed4441c1ef.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c6366d8bb0e944a74a6e050556f36473.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/62d46106c472672ee150578f959ad09c.jpeg)
好了,这个方法我们也是过了,可行度倒是可以,但是我们还是遇到了一个问题,那就是当我们导入有汉字的数据时,数据库的那个字段显示不了,有一点点乱码,但很多是空,不知道为什么,字段的属性是varchar,没错的,所以这一问题没有解决,我们只好又换!!!知道怎么回事的同学指点指点啊,先谢谢了!!!
三.软件导入
哈哈,这个方法是最爽的,我们终于搜到了一个这么方便的东东,名字叫"xls2sql",大家去百度一下也可以搜到,下下来用就是了,但是问题还是接踵而至啊,真是超级郁闷!!就是你在到如数据的时候他会跟你的Excel自动建表,然后字段属性也是很智能的帮你完成,完全就是一款傻瓜软件,可是我们的表已经建好了,字段属性也已经完成,它没那么听话我们也只好另寻他法了,无奈啊..........
四.csv导入
这是我们最终采取的方法,就是你先从mysql数据库中导出csv的空数据表,然后再把Excel中的数据复制到相应的csv表格中,然后再用mysql导入csv数据表...不过这里也有点小麻烦,就是有的时候csv表格保存的时候他会出错,你再打开的时候可能他会把多有的数据都挤到第一列去,没有关系,在mysql插入数据的时候选择制表键就可以了~~,如果cvs中的数据排列正常的话那就什么都不用选,插入的时候默认选择是字符....