gpt4 book ai didi

mysql - 在H2中初始化数据时从文件加载数据

转载 作者:行者123 更新时间:2023-11-29 16:46:46 27 4
gpt4 key购买 nike

我有一个大 data.sql 文件,用于在应用程序启动时将数据加载到 H2 中。

这是我的 data.sql 的一部分

CREATE TRIGGER AU_TRIGGER
AFTER UPDATE ON TABLE_A FOR EACH ROW
CALL "com.trigger.MyTrigger";

LOAD DATA LOW_PRIORITY INFILE 'C:/Users/mytextfile.delim'
REPLACE INTO TABLE TABLE_B
FIELDS TERMINATED BY '|'
IGNORE 1 LINES
(name, age, etc);

当我启动应用程序时,data.sql 中的所有查询都运行良好,但一旦到达 LOAD DATA... 部分,我就会收到此错误:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "LOAD[*] DATA LOW_PRIORITY INFILE ... [42000-197]

This is my application.yml spring.datasource.url
=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
spring.datasource.username: myusername
spring.datasource.password: mypassword
driver-class-name: org.h2.Driver

有人可以建议我如何解决这个问题吗?有什么提示吗?

最佳答案

我能够通过以编程方式配置 H2 来解决这个问题。

@Bean
public DataSource dataSource() throws SQLException {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.H2)
.setName("mydb;MODE=MYSQL")
.addScript("mariadb.sql") //this file name has to be different than data.sql otherwise Springboot will pick data.sql automatically and this will also run.
.build();
return db;
}

然后创建另一个依赖于上述数据源的 bean:

@Bean
@DependsOn("dataSource")
public Void string(DataSource db) throws SQLException {
//read file using whatever means. I used Scanner and delimeted it myself.
final Connection connection = db.getConnection();
//here use the prepratedStatements
PreparedStatement stmt = connection.prepareStatement(Insert xyz); //lookup how to use PreparedStatement.
}

创建一个单独的 bean 来将数据插入表中非常重要。您还可以在 DataSource bean 中运行准备好的语句,但它对我不起作用。因此,在数据源全部设置完毕后,我在其外部插入了数据。

关于mysql - 在H2中初始化数据时从文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53050150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com