【问题标题】:How to import excel data to mysql?如何将excel数据导入mysql?
【发布时间】:2015-10-13 21:30:27
【问题描述】:

我有一个包含许多字段的 Excel 表。我有一个包含许多表的数据库,这些表链接到另一个表。 excel 工作表包含的字段被插入到多个表中,这些表链接到另一个表。

例如 sample.xls 或 .xlsx

id | Name  | Number    | Designation
1  | manan | 987654321 | software eng.

数据库:个人表

id | Name  | Number    | Desig_Id
1  | manan | 987654321 | 1

数据库:指定表

Desig_id | Designation Name
1        | software eng.

这只是一个示例,我同时链接了许多表。我该如何导入这种类型的数据?

【问题讨论】:

  • 由于我的回答解决了您的问题,您应该将其标记为已接受,以便该线程可以被视为已关闭

标签: java mysql vba excel


【解决方案1】:

编码本身有点复杂,但如果你想要一个简单的答案;您可以使用JDBC 与Java 中的数据库进行交互,也可以使用Apache POI 与Java 中的Excel 文件进行交互(他们的how-to 页面非常有用)。

【讨论】:

  • 如何使用 Apache POI 抓取特定列?
  • @MananPatel 您可以遍历行并获取该列中每一行的单元格:for(int i=0; i<sheet.getLastRowNum(); i++){Cell c = sheet.getRow(i).getCell(columnNumber);//Whatever you want to do with the cell}Cell 有很多方法可供您使用,包括一组用于不同数据类型的 get 方法来获取 Cell 中的值。 (例如:.getStringCellValue() 将单元格的值作为String 返回。
  • @MananPatel 如果您使用该 for 循环,请确保您使用 i <= sheet.getLastRowNum()。我只写了<
【解决方案2】:

您可以将所有记录分成多个表,就像它们在您的数据库中一样。 您将为每个表创建一个 excel 文件并使用mysql-excel mechanism 将其导入。您还可以将 excel 文件导出为 .csv 并使用 MySQL Workbench or by command prompt 直接导入

如果您不想规范化 excel 文件,另一种方法是解析文件并以编程方式导入。可以使用apache-poi读取excel文件,也可以将excel文件导出为csv文件解析为文本文件。

import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class App {

    public static void main(String[] args) {
        Workbook wb = null;
        InputStream inp = null;
        try {
            // InputStream inp = new FileInputStream("workbook.xls");
            inp = new FileInputStream("workbook.xlsx");
            wb = WorkbookFactory.create(inp);
            Sheet sheet = wb.getSheetAt(0);
            for (Row row : sheet) {
                for (Cell cell : row) {
                    System.out.println(getCellValue(cell));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try { if(wb != null) wb.close(); } catch (Exception e) {}
            try { if(inp != null) inp.close(); } catch (Exception e) {}
        }
    }

    private static Object getCellValue(Cell cell) {
        switch(cell.getCellType()) {
        case Cell.CELL_TYPE_STRING :
            return cell.getStringCellValue();
        case Cell.CELL_TYPE_NUMERIC : 
            return cell.getNumericCellValue();
        case Cell.CELL_TYPE_BOOLEAN : 
            return cell.getBooleanCellValue();
        case Cell.CELL_TYPE_ERROR : 
            return cell.getErrorCellValue();
        case Cell.CELL_TYPE_FORMULA : 
            return cell.getCellFormula();
        case Cell.CELL_TYPE_BLANK :
            return null;
        default : 
            return null;
        }
    }
}

Excel 示例 (xlsx)

id  Name    Number  Designation
1   manan_1 9876543211  software eng._1
2   manan_2 9876543212  software eng._2
3   manan_3 9876543213  software eng._3

依赖项(Maven)

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-excelant</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-examples</artifactId>
    <version>3.12</version>
</dependency>

【讨论】:

  • Apache-poi 应该很有用,因为有大量记录,我不知道您可以单独为此创建不同的 Excel 表。如何使用 Apache POI 抓取特定列?
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 2012-05-02
  • 2014-03-24
  • 2015-09-03
  • 2014-04-11
相关资源
最近更新 更多