从春季JDBC模板执行SQL文件

2022-09-01 20:06:53

我正在尝试编写一些代码来读取SQL文件(分隔多个语句)并执行所有语句。CREATE TABLE;

在纯JDBC中,我可以写:

String sqlQuery = "CREATE TABLE A (...); CREATE TABLE B (...);"
java.sql.Connection connection = ...;
Statement statement = connection.createStatement();
statement.executeUpdate(sqlQuery);
statement.close();

并且两个(所有)语句都被执行了。当我尝试在春季JdbcTemplate中做同样的事情时,只执行了第一个语句!

String sqlQuery = "CREATE TABLE A (...); CREATE TABLE B (...);"
org.springframework.jdbc.core.JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute(sqlQuery);

有没有办法执行多个语句?在谷歌搜索时,我只发现了像“手动拆分sqlQuery”这样的解决方案,这当然是无用的(它需要更多的解析)。;


答案 1

也许Spring的ScriptUtils在你的情况下会很有用。特别是方法。executeSqlScript

请注意,其默认值为(请参见常量字段值)DEFAULT_STATEMENT_SEPARATOR';')


答案 2

我以这种方式解决了这个问题:

public void createDefaultDB(DataSource dataSource) {
    Resource resource = new ClassPathResource("CreateDefaultDB.sql");
    ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(resource);
    databasePopulator.execute(dataSource);
}

您可以像往常一样注射:DataSource

import javax.sql.DataSource;
//...
@Autowired
private DataSource dataSource;

推荐