打开数据库管理句柄

时间:2011-05-13 01:19:04

标签: java

我正在使用伯克利数据库......

通常在这种类型的数据库中,您打开一个环境,这是一堆文件来控制锁定和事务等,然后在这个环境中打开您的数据库......

问题是有很多数据库要打开.... 打开数据库的方法是opendatabase()
但是,打开和关闭数据库总是很慢......文档说

  

打开数据库是相对的   昂贵的操作,并维持一个   一组开放数据库通常是   优选反复打开和   关闭每个新数据库   查询。

问题是如何保持那套?????? 我认为一个简单的解决方案是延迟加载

 private static Database db;
     public   CustomerDAO() {
            if (db == null) {
                try {
                    DatabaseConfig dbConfig = new DatabaseConfig();
                    dbConfig.setAllowCreate(true);
                    dbConfig.setType(DatabaseType.BTREE);
                    db = BDBEnvironment.DEFAULT.getEnvironment().openDatabase(null, "C:\\xxxx\\CUSTOMERS",
                            null, dbConfig); 

但这有双重检查锁定的问题..对吗? 另一个问题是我想要一个默认文件名或一个用户指定的文件名。当然,创建一个DatabaseManager很容易,但总会发生双重检查锁定问题。
任何想法如何维护一组数据库句柄??

1 个答案:

答案 0 :(得分:2)

使用基本的Java同步技术和线程安全的数据结构(如ConcurrentHashMap)来存储数据库句柄。你可能应该阅读this book,如果你还没有,因为它涵盖了你需要解决的这类问题。