将一百万条记录从excel复制到数据库

时间:2018-04-22 02:15:52

标签: sql excel database oracle

我的 excel表中有 100万个记录,我想以最快的方式将这些记录复制到 oracle 数据库。

我知道有两种方法使用批量,其他方式使用 SQLBulkcopy

除了这两种方法之外,还有最快的方法吗?

此外,我还需要创建一个log file,其中包含在执行操作时未插入的记录的详细信息。

3 个答案:

答案 0 :(得分:2)

最快的方法是将Excel文件类型设置为CSV,将所有列与表格标题相匹配,然后手动将CSV导入表格。

答案 1 :(得分:1)

在远程服务器上加载逗号分隔文件的最快方法是通过sql * ldr使用直接路径加载..如果在同一台服务器上也可以使用外部表..

我建议您使用2个步骤加载.. 首先按照blog创建一个sql * ldr加载脚本。 然后在oracle客户端中运行生成的脚本.. 如果表有nologging,那么在执行脚本之前添加append命令会使它更快..

话虽如此,一百万行对于oracle来说太小了,如果表没有严重索引,应该可以在一分钟内加载..

你可以通过并行加载来加载更快,但这只是一百万行的过度杀戮。

答案 2 :(得分:-1)

您可以使用任何Excel解析库,例如apache-poi 它使您能够阅读excel电子表格。

只需存储每一行​​&列,以及您需要的任何其他数据。 然后,将所有数据传输到您希望在其上查看的服务器/位置。

使用此库的我的某个程序的示例源代码:

public boolean read() {
    for (final int sheet : sheets()) {
        final Sheet result = workbook.getSheetAt(sheet);
        if (result != null) {
            results.addAll(results(result));
        }
    }
    if (results().size() > 0) {
        System.out.println("Creating backup database incase any failures occur...");
        createBackup();
        return true;
    }
    return false;
}

public boolean open() {
    try {
        results = new HashSet<E>();
        workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(new File(location()))));
    } catch (IOException e) {
        System.out.println("IOException getting workbook from speadsheet: " + e.getMessage());
    }
    return results != null && workbook != null;
}