本文目录一览:
- 1、Java利用POI导入excel表格并将数据存到数据库的问题
- 2、java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决
- 3、java,用POI实现将excel导入到数据库
- 4、用POI将EXCEL表的数据导入到数据库时的setCellType()问题。
- 5、用poi怎样把excel文件里面的数据导入数据库三张关联的表中
- 6、java通过poi把excel文件导入mysql数据库报错
Java利用POI导入excel表格并将数据存到数据库的问题
当有合并表格的情况下,认为是左上角单元格的数据,意思就是 标题 认为是a1,但是当你循环遍历这样的合并表格的话,数据是会重复的,即把合并的单元格拆分后每个单元格的数据都是一样的,这样就需要你判断过滤了。至于你这种单元格拼接的话就没有什么办法了,读取出单元格数据循环判断,然后存入数据库就行了
java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决
注意引入的都是poi的包,使用Cell,excel2003的.xls对应是HSSFCell,而之后的xlsx对应的则是XSSFCell,但是他们都继承于Cell,所以使用Cell就可以使用两种格式的excel导入了,下面解决excel中数据的各种格式
[java] view plaincopy
//读取excel
try {
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gbk");
// 1. 创建工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2. 创建FileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 3. 判断是否是上传表单
// boolean b = upload.isMultipartContent(request);
// 设置上传文件最大值
upload.setSizeMax(25 * 1024 * 1024);
// 是文件上传表单
// 4. 解析request,获得FileItem项
ListFileItem fileitems = upload.parseRequest(request);
// 5. 遍历集合
for (FileItem item : fileitems) {
// 判断是不是普通字段
if (!item.isFormField()) {
// 获得流,读取数据写入文件
InputStream in = item.getInputStream();
Workbook book = createWorkBook(in,item.getName());
// 获得第一个工作表对象
Sheet sheet = book.getSheetAt(0);
if(0==sheet.getLastRowNum()){
//如果没有数据
request.setAttribute("message", "excel的sheet0中不存在数据");
request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
}
// 第一行为标题,从第二行开始录入
for (int i = 1; i = sheet.getLastRowNum(); i++) {
//标题行,用来对比方便得到数据
Row titleRow = sheet.getRow(0);
//数据行
Row row = sheet.getRow(i);
//获得值
String value_temp= this.getValue((Cell) row.getCell(2));
}
}
}
} catch (Exception e) {
e.printStackTrace();
message="导入失败br/"+message;
request.setAttribute("message",message);
request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
}
java,用POI实现将excel导入到数据库
用到的类 是 :
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
try {
// ListString[] 中的元素 行数组String[]为excel中的每一行
ListString[] list = new ArrayListString[]();
InputStream is = new FileInputStream("test.xls");
HSSFWorkbook hwk = new HSSFWorkbook(is);// 将is流实例到 一个excel流里
HSSFSheet sh = hwk.getSheetAt(0);// 得到book第一个工作薄sheet
int rows = sh.getLastRowNum()+1 - sh.getFirstRowNum(); // 总行数
for(int i=0; irows; i++){
HSSFRow row = sh.getRow(i);
int cols = row.getLastCellNum()+1 - row.getFirstCellNum(); // 该行的总列数
String[] str = new String[cols]; // 用来存放该行每一列的值
for (int j = 0; j cols; j++) {
Object col = row.getCell((short)j);
str[j] = col.toString();
}
}
......
......
循环变量 i 和 j 可以自己设定从第几行开始读,第几列开始读,下标从0开始。
然后你想做什么判断想做什么数据匹配都可以自己加了。
poi.hssf.usermodel.* jar包要是网上找不到,就给我发邮件,我邮给你:273686381@qq.com
用POI将EXCEL表的数据导入到数据库时的setCellType()问题。
你需要先判断value的类型,然后再经过相应的处理后,再获取和使用它。
具体 value 的类型:
Cell.CELL_TYPE_STRING
Cell.CELL_TYPE_NUMERIC
Cell.CELL_TYPE_FORMULA
Cell.CELL_TYPE_BOOLEAN
Cell.CELL_TYPE_BLANK
Cell.CELL_TYPE_ERROR
希望对你有帮助。
用poi怎样把excel文件里面的数据导入数据库三张关联的表中
package bis.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import jxl.Sheet;
import jxl.Workbook;
public class Excel {
@SuppressWarnings("unchecked")
public List addCust(File file){
List list=new ArrayList();
List list2=new ArrayList();
Workbook rwb=null;
try {
List list1=new ArrayList();
InputStream is=new FileInputStream(file);//读取文件(所要导入excel的保存目录,如:f://a.xls)
rwb=Workbook.getWorkbook(is);//创建工作薄
Sheet rs=rwb.getSheet(0);//读取excel中的第一个工作表(默认新建excel下面有sheet1,sheet2,sheet3)
int cellCount=rs.getColumns();//获取Sheet表中所包含的总列数
int rowCount=rs.getRows();//获取Sheet表中所包含的总行数
for(int m=0;mcellCount;m++){//将表的第一行数据保存到list1中(列名),即id,name ,age
String cell=rs.getCell(m,0).getContents();
list1.add(cell);
}
for(int i=1;irowCount;i++){//获取值
Map map=new TreeMap();
for(int j=0;jcellCount;j++){
map.put(list1.get(j),rs.getCell(j,i).getContents());//将值以键/值对方式保存到map对象中即(id:1,name:zhangsan,age:18)
}
list.add(map);//将值保存到list中
//System.out.println(list.get(i-1));
}
list2.add(list1);//将表头(id,name,age)保存到list2中
list2.add(list);//将值保存到list2中
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
rwb.close();
}
return list2;
}
public void tosql(){
List list=addCust(file);//file:所要导入excel的保存目录,如:f://a.xls
Map map=new HashMap();
String[] values=new String[ls2.size()];//保存id,name,age 值
for (int i =0; i ls2.size(); i++) {
map=(Map)ls2.get(i);
String value="";
id=(String)map.get("id");
name=(String)map.get("name");
age=(String)map.get("age");
value=id+";"+name+";"+age;
values[i]=value;
}
}
}
这是段读取excel表数据的代码,在tosql方法中调用addCust方法读取excel表,最后把所有行的id,name,age值保存到了values数组中,也可以保存到类中,如果你会对数据库操作的话,
后面的你自己弄下就行了,不会的话留言,我晚上在告诉你,我现在上班呢,时间有限,只能写这么多了
java通过poi把excel文件导入mysql数据库报错
java通过poi把excel文件导入mysql数据库报错是因为excel中的数据类型要跟mysql中的数据类型和长度对应,否则类型转换异常是最常见的。所以插入到mysql数据库的时候需要做类型检查。
1、Excel中的测试数据:
2、数据库表结构:
CREATE TABLE `student_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`no` varchar(20) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`age` varchar(10) DEFAULT NULL,
`score` float DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、java源码部分ReadExcel.java:
/**
* 读取excel中的数据并插入db
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
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;
import com.b510.common.Common;
import com.b510.excel.vo.Student;
/**
* @author pieryon
* @created 2016-5-18
*/
public class ReadExcel {
public ListStudent readXls() throws IOException {
InputStream is = new FileInputStream(Common.EXCEL_PATH);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
Student student = null;
ListStudent list = new ArrayListStudent();
// 循环工作表Sheet
for (int numSheet = 0; numSheet hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// 循环行Row
for (int rowNum = 1; rowNum = hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow != null) {
student = new Student();
HSSFCell no = hssfRow.getCell(0);
HSSFCell name = hssfRow.getCell(1);
HSSFCell age = hssfRow.getCell(2);
HSSFCell score = hssfRow.getCell(3);
student.setNo(getValue(no));
student.setName(getValue(name));
student.setAge(getValue(age));
student.setScore(Float.valueOf(getValue(score)));
list.add(student);
}
}
}
return list;
}
@SuppressWarnings("static-access")
private String getValue(HSSFCell hssfCell) {
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
// 返回布尔类型的值
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
// 返回数值类型的值
return String.valueOf(hssfCell.getNumericCellValue());
} else {
// 返回字符串类型的值
return String.valueOf(hssfCell.getStringCellValue());
}
}
}
2、SaveData2DB.java
/**
* 插入数据到db
*/
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import com.b510.common.Common;
import com.b510.excel.util.DbUtil;
import com.b510.excel.vo.Student;
/**
* @author pieryon
* @created 2016-5-18
*/
public class SaveData2DB {
@SuppressWarnings({ "rawtypes" })
public void save() throws IOException, SQLException {
ReadExcel xlsMain = new ReadExcel();
Student student = null;
ListStudent list = xlsMain.readXls();
for (int i = 0; i list.size(); i++) {
student = list.get(i);
List l = DbUtil.selectOne(Common.SELECT_STUDENT_SQL + "'%" + student.getName() + "%'", student);
if (!l.contains(1)) {
DbUtil.insert(Common.INSERT_STUDENT_SQL, student);
} else {
System.out.println("The Record was Exist : No. = " + student.getNo() + " , Name = " + student.getName() + ", Age = " + student.getAge() + ", and has been throw away!");
}
}
}
}
保存结果: