java通过poi把excel文件导入mysql数据库报错 40

publicclassExcel2MySql{publicExcel2MySql()throwsException{Connectioncon=null;Prepared... public class Excel2MySql {

public Excel2MySql() throws Exception {
Connection con = null;
PreparedStatement ps =null;
DBConnection db = new DBConnection();
con = db.getDB();
String filePath = "C:\\Users\\Administrator\\workspace\\项目\\city.xls";
// 文件流指向excel文件
FileInputStream fin = new FileInputStream(filePath);
HSSFWorkbook workbook = new HSSFWorkbook(fin);// 创建工作薄
HSSFSheet sheet = workbook.getSheetAt(0);// 得到工作表
HSSFRow row = null;// 对应excel的行
HSSFCell cell = null;// 对应excel的列
int totalRow = sheet.getLastRowNum();// 得到excel的总记录条数// 以下的字段一一对应数据库表的字段
String Id = "";
String Name = "";
String CountryCode = "";
String District = "";
String Population = "";
String sql = "insert into city(Id,Name,CountryCode,District,Population) " + "values(?,?,?,?,?)";
for (int i = 1; i <= totalRow; i++) {
row = sheet.getRow(i);
cell = row.getCell(1);
Id = cell.getRichStringCellValue().toString();
cell = row.getCell(2);
Name = cell.getRichStringCellValue().toString();
cell = row.getCell(3);
CountryCode = cell.getRichStringCellValue().toString();
cell = row.getCell(4);
District = cell.getRichStringCellValue().toString();
cell = row.getCell(5);
Population = cell.getRichStringCellValue().toString();
ps = con.prepareStatement(sql);
ps.setString(1, Id);
ps.setString(2, Name);
ps.setString(3, CountryCode);
ps.setString(4, District);
ps.setString(5, Population);
ps.execute();
}
ps.close();
con.close();
}
public static void main(String[] args) {
try {
@SuppressWarnings("unused")
Excel2MySql mysql=new Excel2MySql();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
问题我自己解决了。贴出修改部分的代码,大家看下。
row = sheet.getRow(i);
cell = row.getCell(0);
Id =(int)Double.parseDouble(cell.toString());

cell = row.getCell(1);
Name = cell.toString();

cell = row.getCell(2);
CountryCode = cell.toString();

cell = row.getCell(3);
District = cell.toString();

cell = row.getCell(4);
Population =(int)Double.parseDouble(cell.toString());
展开
 我来答
育知同创教育
2016-05-21 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

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

            }

        }

    }

}

保存结果:

匿名用户
2016-04-23
展开全部
在老版本的MySQL3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。  而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。  当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。  而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。
追问
嗯。这么高深。脑子太笨了,不懂呢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LinuxRookie5
2016-04-23
知道答主
回答量:1
采纳率:0%
帮助的人:1130
展开全部
你不把报错信息贴出来,谁给你挨行代码看着去猜啊......
追问
我贴出来了,希望大神帮我看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式