这是application.properties中的数据源规范
spring.dw.datasource.jdbc-url=jdbc:h2:tcp://localhost/file:~/developer/myprojects;schema=DW;FILE_LOCK=SOCKET;MVCC=true
spring.dw.datasource.driver-class-name=org.h2.Driver
spring.dw.datasource.username=me
spring.dw.datasource.password=p
spring.dw.datasource.platform=h2
在我的配置中,我这样做:
@Configuration
public class DatasourceConfiguration {
//...
@Bean
@ConfigurationProperties(prefix="spring.dw.database")
public DataSource dwDatasource(){
return DataSourceBuilder.create().build();
}
我使用一种服务方法:
@Autowired
public DataSource dwDatasource;
public void run() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dwDatasource);
jdbcTemplate.update("INSERT INTO SAMPLETABLE1 (STRING1, STRING2) VALUES ('TEST4', 'TEST2')");
System.out.println("<<run()");
}
我得到:
StatementCallback; bad SQL grammar [INSERT INTO SAMPLETABLE1 (STRING1, STRING2) VALUES ('TEST4', 'TEST2')]; nested exception is org.h2.jdbc.JdbcSQLException: Table "SAMPLETABLE1" not found; SQL statement:
但是,如果我这样做:
public void run() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dwDatasource);
jdbcTemplate.update("INSERT INTO DW.SAMPLETABLE1 (STRING1, STRING2) VALUES ('TEST4', 'TEST2')");
System.out.println("<<run()");
}
所有作品。
问题是,为什么我必须指定架构
答案 0 :(得分:2)
摘自H2文档:schema
默认 在未显式设置任何模式的语句中使用schema。的 新连接的默认架构为
PUBLIC
。
您可以从同一文档中指定要使用的默认架构:
此设置可以附加到数据库URL:
jdbc:h2:test;SCHEMA=ABC