【问题标题】:Is there any way to batch insert sqls read from a file into database using jdbctemplate?有没有办法使用 jdbctemplate 将从文件中读取的 sql 批量插入到数据库中?
【发布时间】:2021-05-19 14:41:40
【问题描述】:

我想将大约 5 万条记录批量插入到 vertica 数据库中。我在我的应用程序中使用spring JDBC模板,并且我将所有这些sqls保存在一个文件中,我知道有一种方法可以通过注入参数来批量插入,例如使用preparedstatement,但是如何直接通过sqls批量插入它们?

【问题讨论】:

    标签: spring-boot spring-data-jpa spring-data jdbctemplate vertica


    【解决方案1】:

    【讨论】:

    • 请不要仅发布链接答案。在答案本身中包含来自链接资源的相关信息,因此无需链接后面的内容即可使用。
    • 好的,谢谢你的帮助
    【解决方案2】:

    如果您的 SQL 语句如下所示:

    INSERT INTO test VALUES ( 1,'Arthur','Dent',           TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 2,'Ford','Prefect',          TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 3,'Zaphod','Beeblebrox',     TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 4,'Tricia','McMillan',       TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 5,'Gag','Halfrunt',          TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 6,'Prostetnic Vogon','Jeltz',TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 7,'Lionel','Prosser',        TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 8,'Benji','Mouse',           TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES ( 9,'Frankie','Mouse',         TIMESTAMP '2017-02-05 00:00:00');
    INSERT INTO test VALUES (10,'Svlad','Cjelli',          TIMESTAMP '2017-02-05 00:00:00');
    

    并且文件名为test.sql,您可以搜索替换该文件中不需要的所有内容,使其成为加载文件。

    $ perl -pe 's/INSERT INTO test VALUES \(//; s/TIMESTAMP //; s/\);//;' test.sql >test.csv
    

    然后,触发 Sql 命令:

    COPY test FROM LOCAL 'test.csv' DELIMITER ',' ENCLOSED BY '''' REJECTMAX 5 EXCEPTIONS '/dev/tty';
    -- in Windows: EXCEPTIONS 'NUL'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多