Excel的数据导入到数据库中出现的两个问题及解决方案

本文介绍了一种将Excel数据导入数据库的方法,并针对过程中遇到的问题提供了详细的解决方案。主要问题包括程序异常错误和数据导入不全的情况,通过调整Excel数据格式和处理空格问题成功解决了这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     今天要把Excel中的数据导入到数据库中,写了段代码,出现两个问题,解决方法如下。

问题一:程序报错,报错如下,原因是excel中用了筛选,且有标题头,去掉即可。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

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 ImportExcel {
    public static String filePath = "D://20130128.xls";
      public static void main(String[] args) {
            try {
          // 创建对Excel工作簿文件的引用
                FileInputStream file = new FileInputStream(filePath);

          HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath));
                  // 在Excel文档中,第一张工作表的缺省索引是0
                  // 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
                  HSSFSheet sheet = wookbook.getSheetAt(0);
                  //获取到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 = 1; j < 7; j++) {
                                    //获取到列的值
                                    HSSFCell cell = row.getCell((short)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 += cell.getStringCellValue() + " ";
                                                break;
                                    }
                              }
                        }
                              System.out.println(i+"   "+value);
                  }

             }
      } catch (FileNotFoundException e) {
            e.printStackTrace();
      } catch (IOException e) {
            e.printStackTrace();
      }
   }
}

 

java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at org.apache.poi.hssf.record.RecordFactory.createRecord(RecordFactory.java:224)
 at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:160)
 at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:163)
 at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:210)
 at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:191)
 at com.comtop.log.ImportExcel.main(ImportExcel.java:20)
Caused by: java.lang.ArrayIndexOutOfBoundsException
 at java.lang.System.arraycopy(Native Method)
 at org.apache.poi.hssf.record.UnknownRecord.<init>(UnknownRecord.java:62)
 at org.apache.poi.hssf.record.SubRecord.createSubRecord(SubRecord.java:57)
 at org.apache.poi.hssf.record.ObjRecord.fillFields(ObjRecord.java:99)
 at org.apache.poi.hssf.record.Record.fillFields(Record.java:90)
 at org.apache.poi.hssf.record.Record.<init>(Record.java:55)
 at org.apache.poi.hssf.record.ObjRecord.<init>(ObjRecord.java:61)
 ... 10 more
Exception in thread "main" org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance, the following exception occured: null
 at org.apache.poi.hssf.record.RecordFactory.createRecord(RecordFactory.java:237)
 at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:160)
 at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:163)
 at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:210)
 at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:191)
 at com.comtop.log.ImportExcel.main(ImportExcel.java:20)
问题二:原本是800条数据,导到512就导不进去了,读取excel的数据打印出来看到有几条数据是乱码。随后检查excel中的内容,看到有些字段内容后面有空格,把空格去掉后,导入正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值