2013-06-18 8 views
0

h2 연결 (데이터베이스 릴리스)을 닫고 다른 h2 데이터베이스 (디버그 데이터베이스)에 연결하려고하면 문제가 발생합니다.h2 연결 끊기 및 연결

Snipplet는 연결 :

this.connection = new JdbcConnectionSource(connectionString); 

Snipplet가 분리 :

this.connection.close(); 

를 ConnectionString을 :

jdbc:h2:file:/data/data/my.app/databases/myapp 
jdbc:h2:file:/data/data/my.app/testdatabases/myapp 

을 그리고 대신 이전을 사용하는 "새로운"연결을 사용하는. 데이터베이스에 대해 다른 디렉토리를 사용하고 있습니다. 두 경우 모두 database1과 database2 사이를 토글하려고 할 때 .lock 및 .trace 파일은 해당 디렉토리에서 삭제되지 않습니다.

나는 내 편향 실패를 제외하고 싶다. android 4.2.2에서 ormlite와 함께 h2 (현재 버전)를 사용하고 있습니다.

+0

새로운 ConnectionSource를 만들려면 새로운 DAO 클래스를 만들어야합니다. 맞습니까? – Gray

+0

바로 연결 후 DaoManager.createDao (연결, 클래스)를 호출해야합니다 – user2379652

답변

0

"새"연결 대신 이전 연결이 사용됩니다.

ConnectionSource를 작성하는 경우 다음 당신은 당신의 DAO의 모든 클래스를 다시 작성하고 DaoManager 내에서 DAO 캐시를 삭제해야합니다. 각 DAO 클래스에는 이전 연결 원본의 복사본이 있습니다.

ConnectionSource connectionSource = new JdbcConnectionSource(connectionString); 
DaoManager.clearCache(); 
Dao<Foo,Integer> fooDao = DaoManager.createDao(connectionSource, Foo.class); 
... 
+0

고마워요! 이것은 도움이되었지만 재 연결 후 SQLException이 throw됩니다. "Session closed". 그것은 내가 처음 "새 연결"을 쿼리 할 때 발생합니다. 그러나 데이터베이스와 테이블은 성공적으로 작성됩니다. 어떤 아이디어? – user2379652

+0

Hrm. 방금 다음 테스트를 추가했고 잘 작동하는 것처럼 보입니다 @ user2379652. https://github.com/j256/ormlite-jdbc/blob/master/src/test/java/com/j256/ormlite/dao/DoubleDbOpenTest.java – Gray

+0

Thx 나는 또한 이것을 더 작은 데이터베이스로 테스트했습니다. 거기에서도 작동합니다. 그러나 나는 18 개의 테이블이 문제가되어서는 안된다고 생각한다. 예외 stil가 던져지는 미친 물건 그러나 그것은 일한다. 데이터베이스에서 데이터를 읽고 저장할 수있었습니다. – user2379652