2017-01-24 8 views
0

내 파일 기반 HSQL 데이터베이스를 변경하고 Java 프로세스를 종료 한 후 어떤 이유로 든 데이터베이스에 아무 것도 저장되지 않은 것처럼 보입니다. I.E. 나는 "table already exists"예외를 만나지 않고이 프로그램을 계속해서 다시 실행할 수 있습니다. 도대체 무슨 일이냐고?!HSQLDB with JdbcTemplate, 아무 것도 저장되지 않습니다.

Main 클래스 :

import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.jdbc.core.JdbcTemplate; 

import java.io.IOException; 
import java.sql.SQLException; 

public class TestApp { 

    public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException { 
     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DbConfig.class, TestDao.class); 
     JdbcTemplate template = ctx.getBean(JdbcTemplate.class); 
     TestDao dao = ctx.getBean(TestDao.class); 
     dao.testTransactionality(); 
    } 
} 

구성 :

import org.apache.commons.dbcp.BasicDataSource; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.datasource.DataSourceTransactionManager; 
import org.springframework.transaction.PlatformTransactionManager; 

import javax.sql.DataSource; 

@Configuration 
public class DbConfig { 

    @Bean 
    public DataSource getDataSource(){ 
     BasicDataSource ds = new BasicDataSource(); 
     ds.setDriverClassName("org.hsqldb.jdbcDriver"); 
     ds.setUrl("jdbc:hsqldb:file:databaseFiles/test/"); 
     ds.setUsername("sa"); 
     ds.setPassword("1"); 
     return ds; 
    } 

    @Bean 
    JdbcTemplate getJdbcTemplate(DataSource ds){ 
     return new JdbcTemplate(ds); 
    } 

    @Bean 
    PlatformTransactionManager getTransactionManager(DataSource dataSource){ 
     return new DataSourceTransactionManager(dataSource); 
    } 
} 

DAO :

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 
import org.springframework.transaction.annotation.Transactional; 

@Repository 
@EnableTransactionManagement 
@Transactional 
public class TestDao { 

    @Autowired 
    private JdbcTemplate template; 

    @Transactional 
    public void testTransactionality(){ 
     template.execute("create table LIBRARY (LIBRARY_ID INT, LIBRARY_TITLE VARCHAR(400))"); 
     template.execute("insert into library values (1, 'Library')"); 
    } 
} 

내가 명시 적으로 커밋을 일반 JDBC 클래스와 비슷한 일을뿐만 아니라 일을 시도, 아무것도 도움이되는 것 같습니다. HSQLDB 문제라고 생각합니다. 도와주세요

답변

1

데이터베이스 URL이 올바르지 않습니다 (슬래시로 끝나지 않아야합니다). 쓰기 지연을 0으로 변경하여 변경 사항을 확인해야합니다.

ds.setUrl("jdbc:hsqldb:file:databaseFiles/test;hsqldb.write_delay_millis=0"); 
+0

범례! 고맙습니다. – user1488773