如何使用Spring Boot将巨大的TSV文件导入内存数据库中的H2

发布于 2025-02-04 10:49:25 字数 138 浏览 2 评论 0原文

我有一个巨大的tsv文件,我需要将它们导入内存数据库中的H2。

我可以使用扫描仪读取它,然后按行导入它,但需要几个小时!

是否有任何更快的方法将TSV文件导入内存数据库中的H2?

I have a huge tsv files and I need to import them into my h2 in memory database.

I can read it with Scanner and import it line by line but it takes for hours !

is there any faster way to import tsv file into h2 in memory database ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

春夜浅 2025-02-11 10:49:25

使用插入选择转换以直接从文件导入到H2表中。

如何将CSV文件读取到H2数据库中

public static void main (String [] args) throws Exception {

    Connection conn = null;
    Statement stmt = null;

    Class.forName("org.h2.Driver");
    conn = DriverManager.getConnection("jdbc:h2:~/test", "", "");
    stmt = conn.createStatement();

    stmt.execute("drop table if exists csvdata");
    stmt.execute("create table csvdata (id int primary key, name varchar(100), age int)");
    stmt.execute("insert into csvdata ( id, name, age )     select convert( \"id\",int ), \"name\", convert( \"age\", int)   from CSVREAD( 'c:\\tmp\\sample.csv', 'id,name,age', null ) ");
    ResultSet rs = stmt.executeQuery("select * from csvdata");

    while (rs.next()) {
        System.out.println("id " + rs.getInt("id") + " name " + rs.getString("name") + " age " + rs.getInt("age") );
    }
    stmt.close();
}

SELECT * FROM CSVREAD('test.csv');
-- Read a file containing the columns ID, NAME with
SELECT * FROM CSVREAD('test2.csv', 'ID|NAME', 'charset=UTF-8 fieldSeparator=|');
SELECT * FROM CSVREAD('data/test.csv', null, 'rowSeparator=;');
-- Read a tab-separated file
SELECT * FROM CSVREAD('data/test.tsv', null, 'rowSeparator=' || CHAR(9));
SELECT "Last Name" FROM CSVREAD('address.csv');
SELECT "Last Name" FROM CSVREAD('classpath:/org/acme/data/address.csv');

h2 csvread函数

这些命令的场分离器。

Use insert into select convert for direct importing from file into your h2 table.

How to read CSV file into H2 database :

public static void main (String [] args) throws Exception {

    Connection conn = null;
    Statement stmt = null;

    Class.forName("org.h2.Driver");
    conn = DriverManager.getConnection("jdbc:h2:~/test", "", "");
    stmt = conn.createStatement();

    stmt.execute("drop table if exists csvdata");
    stmt.execute("create table csvdata (id int primary key, name varchar(100), age int)");
    stmt.execute("insert into csvdata ( id, name, age )     select convert( \"id\",int ), \"name\", convert( \"age\", int)   from CSVREAD( 'c:\\tmp\\sample.csv', 'id,name,age', null ) ");
    ResultSet rs = stmt.executeQuery("select * from csvdata");

    while (rs.next()) {
        System.out.println("id " + rs.getInt("id") + " name " + rs.getString("name") + " age " + rs.getInt("age") );
    }
    stmt.close();
}

Or

SELECT * FROM CSVREAD('test.csv');
-- Read a file containing the columns ID, NAME with
SELECT * FROM CSVREAD('test2.csv', 'ID|NAME', 'charset=UTF-8 fieldSeparator=|');
SELECT * FROM CSVREAD('data/test.csv', null, 'rowSeparator=;');
-- Read a tab-separated file
SELECT * FROM CSVREAD('data/test.tsv', null, 'rowSeparator=' || CHAR(9));
SELECT "Last Name" FROM CSVREAD('address.csv');
SELECT "Last Name" FROM CSVREAD('classpath:/org/acme/data/address.csv');

h2 csvread function

NOTE: You can specify file's field separator for these commands.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文