2013-06-18 120 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上使用h2(当前版本)和ormlite。

+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:“会话已关闭”。它发生在我首先查询“新连接”时。但数据库和表已成功创建。有任何想法吗? – 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