2014-09-03 4 views
0

Я пытаюсь изучить основы jdbctemplate Spring. У меня возникли проблемы с простым примером:Тривиальное создание, вставка с помощью jdbctemplate

public static void main(String[] args) throws Exception { 
    JdbcDataSource dataSource = new JdbcDataSource(); 
    String url = "jdbc:h2:mem:test"; 
    dataSource.setURL(url); 

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 

    jdbcTemplate.execute("create table something (id int primary key, name varchar(100))"); 
    jdbcTemplate.execute("insert into something (id, name) values (1, 'Brian')"); 
} 

Триггерами этого:

Caused by: org.h2.jdbc.JdbcSQLException: Table "SOMETHING" not found; SQL statement: 
insert into something (id, name) values (1, 'Brian') [42102-177] 

Если преобразовать этот код, чтобы использовать необработанный JDBC API, он отлично работает:

public static void main(String[] args) throws Exception { 
    JdbcDataSource dataSource = new JdbcDataSource(); 
    String url = "jdbc:h2:mem:test"; 
    dataSource.setURL(url); 

    try (Connection dbConnection = dataSource.getConnection()) { 
     try (Statement statement = dbConnection.createStatement()) { 
      statement.execute("create table something (id int primary key, name varchar(100))"); 
      statement.execute("insert into something (id, name) values (1, 'Brian')"); 

      try (ResultSet rs = statement.executeQuery("select id, name from something")) { 
       while (rs.next()) { 
        System.out.println(String.format("got result. id=%d. name=%s", rs.getInt(1), rs.getString(2))); 
       } 
      } 
     } 
    } 
} 

Если это имеет значение, мои зависимости от Gradle:

compile 'org.springframework:spring-jdbc:4.0.6.RELEASE' 
    compile 'com.h2database:h2:1.4.177' 
+0

Ссылка [Stackoverflow Link] (http://stackoverflow.com/questions/5763747/h2-in-memory-database-table-not-found) Использование jdbc: h2: mem: test; DB_CLOSE_DELAY = -1 –

ответ

0

попробуйте использовать update вместо execute.

+0

Я просто попробовал это. Я получаю ту же ошибку. Чтобы быть ясным, я изменил «выполнить» на «обновление» в команде «вставить». FYI, в сырой версии JDBC работают как execute, так и executeUpdate. – clay

Смежные вопросы