Ond*_*cka 17 java spring jdbctemplate
我正在尝试编写一些读取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();
Run Code Online (Sandbox Code Playgroud)
并且两个(所有)语句都已执行.当我尝试在Spring JdbcTemplate中执行相同操作时,只执行第一个语句!
String sqlQuery = "CREATE TABLE A (...); CREATE TABLE B (...);"
org.springframework.jdbc.core.JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute(sqlQuery);
Run Code Online (Sandbox Code Playgroud)
有没有办法执行多个语句?在谷歌搜索时,我发现只有" ;手动拆分sqlQuery "这样的解决方案当然没用(它需要更多的解析).
sip*_*uel 17
也许Spring的ScriptUtils对你的情况很有用.特别是executeSqlScript方法.
请注意,DEFAULT_STATEMENT_SEPARATOR其默认值为';'(请参阅常量字段值)
Ana*_*iuk 14
我用这种方式解决了这个问题:
public void createDefaultDB(DataSource dataSource) {
Resource resource = new ClassPathResource("CreateDefaultDB.sql");
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(resource);
databasePopulator.execute(dataSource);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
试试吧
public void executeSqlScript(Connection connection,StringBuffer sql)throws SQLException{
try {
connection.setAutoCommit(false);//?????????
ScriptUtils.executeSqlScript(connection, new ByteArrayResource(sql.toString().getBytes()));
connection.commit();//????
} catch (SQLException e) {
connection.rollback();
}finally{
connection.close();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25062 次 |
| 最近记录: |