Почему мне нужно указать схему для JdbcTemplate - PullRequest
0 голосов
/ 27 июня 2018

Вот спецификация источника данных в 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()");
    }

Все работы.

Итак, вопрос, почему я должен указывать схему

1 Ответ

0 голосов
/ 28 июня 2018

Из документации H2: схема

по умолчанию схема используется в операторах, где схема не указана явно. схема по умолчанию для новых подключений: PUBLIC.

Вы можете указать схему по умолчанию для использования из той же документации:

Этот параметр может быть добавлен к URL базы данных: jdbc:h2:test;SCHEMA=ABC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...