乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > java通过<em>poi</em>把<em>excel</em>文件导

java通过<em>poi</em>把<em>excel</em>文件导

作者:乔山办公网日期:

返回目录:excel表格制作


java poi的api读取excel的每一行,每一列。一行创建一个sql或者一个持久化对象,进行数据库存储操作。

java通过poi把excel文件导入mysql数据库报错是因为excel中的数据类型e69da5e887aa7a64339要跟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 List<Student> readXls() throws IOException {

        InputStream is = new FileInputStream(Common.EXCEL_PATH);

        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

        Student student = null;

        List<Student> list = new ArrayList<Student>();

        // 循环工作表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;

        List<Student> 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!");

            }

        }

    }

}

保存结果:


还是字符集不匹配问题,建议mysql使用UTF-8,导入时也使用UTF-8

这问题应该有好几种可能性,首先用poi是否支持中文,是否有需要指定编码格式,还有就是mysql的字符编码设置,如果选了iso-8859-1,显然也不行,根据你的描述,显然在这读取、存储过程中,存在了iso-8859-1的西文编码

相关阅读

  • java通过<em>poi</em>把<em>excel</em>文件导

  • 乔山办公网excel表格制作
  • java poi的api读取excel的每一行,每一列。一行创建一个sql或者一个持久化对象,进行数据库存储操作。poi excel 导出内容中文乱码,急求在线解决..." src="/uploads/tu/741.jpg" style="width: 400px; h
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网