<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 3, comments - 0, trackbacks - 0, articles - 1

    berkeleydb

    Posted on 2013-03-06 17:58 whitesky 閱讀(194) 評論(0)  編輯  收藏
      1 public class BerkeleyDB {
      2 
      3     private static String myEnvPath = Constant.user_dir + "/db";
      4 
      5     public static Map<String, Database> databases = new HashMap<String, Database>();
      6     public static Map<Class, EntryBinding> bindings = new HashMap<Class, EntryBinding>();
      7 
      8     // DB handles
      9     private static Environment myEnv = null;
     10     public final static String basedbname = "basedb";
     11     public final static String operatedbname = "operatedb";
     12     /**
     13     * 單獨存儲類型信息
     14     */
     15     public final static String classCatalogdbname = "classCatalogdb";
     16 
     17     /**
     18      * 
     19      * @brief openEnv
     20      * @details 打開數據庫環境并獲取要操作的數據庫,不存在則創建
     21      * @warning 其中注意事項警告
     22      * @note
     23      * @throws DatabaseException
     24      */
     25     public static void openEnv() throws DatabaseException {
     26         System.out.println("opening env");
     27 
     28         // Set up the environment.
     29         EnvironmentConfig myEnvConfig = new EnvironmentConfig();
     30         myEnvConfig.setAllowCreate(true);
     31         // Set up the database
     32 
     33         // Open the environment
     34         myEnv = new Environment(getFile(myEnvPath), // Env home
     35                 myEnvConfig);
     36 
     37         Database operateDb = myEnv.openDatabase(null, operatedbname, myDbConfig());
     38         databases.put(operatedbname, operateDb);
     39         
     40         Database baseDb = myEnv.openDatabase(null, basedbname, myDbConfig());
     41         databases.put(basedbname, baseDb);
     42 
     43          Database catalogDb = myEnv.openDatabase(null, classCatalogdbname, myDbConfig());
     44         databases.put(classCatalogdbname,catalogDb);
     45     // 創建catalog
     46     StoredClassCatalog classCatalog = new StoredClassCatalog(catalogDb);
     47         // 創建綁定對象
     48         EntryBinding dataBinging = new SerialBinding(classCatalog, OperateInfo.class);
     49         bindings.put(OperateInfo.class, dataBinging);
     50     }
     51     
     52     //對象綁定
     53     public static EntryBinding getBinding(Database db,Class clz){
     54         EntryBinding dataBinging = null;
     55         if(bindings.containsKey(clz)){
     56             dataBinging = bindings.get(clz);
     57         }else{
     58             // 創建catalog
     59             StoredClassCatalog classCatalog = new StoredClassCatalog(db);
     60             dataBinging = new SerialBinding(classCatalog, clz);
     61         }
     62         return dataBinging;
     63     }
     64     
     65     //獲取數據庫
     66     public static Database getDb(String dbname){
     67         Database db = null;
     68         if(databases.containsKey(dbname)){
     69             db = databases.get(dbname);
     70         }else{
     71             db = createDb(dbname);
     72             databases.put(dbname, db);
     73         }
     74         return db;
     75     }
     76 
     77     // 創建數據庫
     78     private static Database createDb(String dbname) {
     79         if (databases.containsKey(dbname)) {
     80             return databases.get(dbname);
     81         }
     82         Database database = myEnv.openDatabase(null, dbname, myDbConfig());
     83         return database;
     84     }
     85 
     86     private static DatabaseConfig myDbConfig() {
     87         DatabaseConfig myDbConfig = new DatabaseConfig();
     88         myDbConfig.setAllowCreate(true);
     89         myDbConfig.setReadOnly(false);
     90         myDbConfig.setSortedDuplicates(false);
     91         return myDbConfig;
     92     }
     93 
     94     /**
     95      * 
     96      * @brief getFile
     97      * @details 獲取數據庫環境目錄,不存在則創建
     98      * @warning 其中注意事項警告
     99      * @note
    100      * @param path
    101      * @return
    102      */
    103     private static File getFile(String path) {
    104         File file = new File(path);
    105         if (!file.exists() || !file.isDirectory()) {
    106             file.mkdir();
    107         }
    108         System.out.println("DB file: " + file.getAbsolutePath());
    109         return file;
    110     }
    111 
    112     /**
    113      * 
    114      * @brief putData
    115      * @details 存儲數據
    116      * @warning 其中注意事項警告
    117      * @note
    118      * @param dbname 數據庫名,不存在則創建
    119      * @param key 
    120      * @param value
    121      * @return
    122      */
    123     public static boolean putString(String dbname, String key, String value) {
    124         Database db = getDb(dbname);
    125         OperationStatus status = null;
    126         try {
    127             DatabaseEntry keyEntry = new DatabaseEntry(key
    128                     .getBytes(Constant.default_charset));
    129             DatabaseEntry valueEntry = new DatabaseEntry(value
    130                     .getBytes(Constant.default_charset));
    131             status = db.put(null, keyEntry, valueEntry);
    132         } catch (UnsupportedEncodingException e) {
    133             System.out.println("putString:[key:" + key + "][value:" + value
    134                     + "]: " + e.toString());
    135             e.printStackTrace();
    136         }
    137         return (status!=null&&status==OperationStatus.SUCCESS)?true:false;
    138     }
    139     
    140     /**
    141      * 
    142      */
    143     public static boolean putObject(String dbname,Class clz,String key,Object value){
    144         Database db = getDb(dbname);
    145         EntryBinding binding = getBinding(db, clz);
    146         OperationStatus status = null;
    147         try {
    148             DatabaseEntry theKey = new DatabaseEntry(key
    149                     .getBytes(Constant.default_charset));
    150             DatabaseEntry theData = new DatabaseEntry();
    151             binding.objectToEntry(value, theData);
    152             status = db.put(null, theKey, theData);
    153         } catch (UnsupportedEncodingException e) {
    154             System.out.println("putObject:[class:" + clz.getName() + "][key:"
    155                     + key + "][value:" + value + "]: " + e.toString());
    156             e.printStackTrace();
    157         }
    158         return (status!=null&&status==OperationStatus.SUCCESS)?true:false;
    159     }
    160 
    161     /**
    162      * 
    163      * @brief getData
    164      * @details 獲取數據
    165      * @warning 其中注意事項警告
    166      * @note
    167      * @param key
    168      * @return
    169      */
    170     public static String getString(String dbname, String key) {
    171         String value = "";
    172         Database db = getDb(dbname);
    173         try {
    174             DatabaseEntry keyEntry = new DatabaseEntry(key
    175                     .getBytes(Constant.default_charset));
    176             DatabaseEntry valueEntry = new DatabaseEntry();
    177             if (OperationStatus.SUCCESS == db.get(null, keyEntry, valueEntry,
    178                     LockMode.DEFAULT)) {
    179                 value = new String(valueEntry.getData(), Constant.default_charset);
    180             }
    181         } catch (UnsupportedEncodingException e) {
    182             System.out.println("getString for key[" + key + "]: "
    183                     + e.toString());
    184             e.printStackTrace();
    185         }
    186         return value;
    187     }
    188     
    189     /**
    190      * 
    191      */
    192     public static Object getObject(String dbname,Class clz,String key){
    193         Database db = getDb(dbname);
    194         EntryBinding binding = getBinding(db, clz);
    195         Object obj = null;
    196         try {
    197             DatabaseEntry theKey = new DatabaseEntry(key.getBytes(Constant.default_charset));
    198             DatabaseEntry theData = new DatabaseEntry();
    199             OperationStatus status = db.get(null, theKey, theData,
    200                     LockMode.DEFAULT);
    201             if (status == OperationStatus.SUCCESS) {
    202                 obj = binding.entryToObject(theData);
    203             }
    204         } catch (UnsupportedEncodingException e) {
    205             System.out.println("getObject[" + clz.getName() + "] for key["
    206                     + key + "]: " + e.toString());
    207             e.printStackTrace();
    208         }
    209         return obj;
    210     }
    211 
    212     /**
    213      * 
    214      * @brief delData
    215      * @details 刪除數據
    216      * @warning 其中注意事項警告
    217      * @note
    218      * @param key
    219      * @return
    220      */
    221     public static boolean delData(String dbname,String key) {
    222         Database db = getDb(dbname);
    223         try {
    224             DatabaseEntry keyEntry = new DatabaseEntry(key
    225                     .getBytes(Constant.default_charset));
    226             if (OperationStatus.SUCCESS == db.delete(null, keyEntry)) {
    227                 return true;
    228             }
    229         } catch (UnsupportedEncodingException e) {
    230             System.out.println("delData for key[" + key + "]: " + e.toString());
    231             e.printStackTrace();
    232         }
    233         return false;
    234     }
    235     
    236     /**
    237      * 
    238      * @brief    clearDb        
    239      * @details    清空數據庫                
    240      * @warning    其中注意事項警告    
    241      * @note    
    242      * @param dbname
    243      */
    244     public static void clearDb(String dbname){
    245         if(databases.containsKey(dbname)){
    246             Database db = databases.get(dbname);
    247             db.close();
    248             myEnv.truncateDatabase(null, dbname, true);
    249             databases.remove(dbname);
    250             System.out.println(" cleardb:"+dbname);
    251         }
    252     }
    253     
    254     /**
    255      * 
    256      * @brief foundString
    257      * @details 通過key和value來同時匹配
    258      * @warning 同樣如果沒有記錄匹配key和value則會返回OperationStatus.NOTFOUND
    259      * @note
    260      * @param dbname
    261      * @param key
    262      * @param value
    263      * @return
    264      */
    265     public static boolean foundString(String dbname, String key, String value) {
    266         Database db = getDb(dbname);
    267         try {
    268             DatabaseEntry keyEntry = new DatabaseEntry(key
    269                     .getBytes(Constant.default_charset));
    270             DatabaseEntry valueEntry = new DatabaseEntry(value
    271                     .getBytes(Constant.default_charset));
    272             if (OperationStatus.SUCCESS == db.getSearchBoth(null, keyEntry,
    273                     valueEntry, LockMode.DEFAULT)) {
    274                 return true;
    275             }
    276         } catch (UnsupportedEncodingException e) {
    277             System.out.println("foundString for key[" + key + "]: "
    278                     + e.toString());
    279             e.printStackTrace();
    280         }
    281         return false;
    282     }
    283     
    284     /**
    285      * 
    286      * @brief closeEnv
    287      * @details 關閉當前數據庫和數據庫環境
    288      * @warning 其中注意事項警告
    289      * @note
    290      */
    291     public static void closeEnv() {
    292         System.out.println("Closing env and databases");
    293         bindings.clear();
    294         for (Database db : databases.values()) {
    295             if (db != null) {
    296                 try {
    297                     db.close();
    298                 } catch (DatabaseException e) {
    299                     System.out.println("closeDB: "+db.getDatabaseName()+" : "+ e.toString());
    300                     e.printStackTrace();
    301                 }
    302             }
    303         }
    304         databases.clear();
    305 
    306         if (myEnv != null) {
    307             try {
    308                 myEnv.cleanLog();
    309                 myEnv.close();
    310             } catch (DatabaseException e) {
    311                 System.out.println("closeEnv: " + e.toString());
    312                 e.printStackTrace();
    313             }
    314         }
    315     }
    316 }

    Berkeley DB Java Edition 使用手冊

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品久久久久国产免费| 午夜精品免费在线观看 | 中文字幕亚洲色图| 亚洲国产精品网站久久| 亚洲精品无码久久久久秋霞| 国产精品成人亚洲| 免费a级毛片无码a∨免费软件| 亚洲一区免费观看| 成人毛片免费观看视频| 亚洲人成影院在线无码观看| 亚洲av午夜成人片精品网站| 亚洲国产日韩在线人成下载 | 亚洲国产精品yw在线观看| 亚洲国产精品无码久久| 一区二区三区精品高清视频免费在线播放| 国产午夜精品免费一区二区三区| 日本阿v免费费视频完整版| 四虎影永久在线高清免费| 狠狠色伊人亚洲综合成人| 亚洲三级在线免费观看| 免费无毒a网站在线观看| 免费av一区二区三区| 在线jyzzjyzz免费视频| 亚洲一区二区三区自拍公司| 亚洲一区二区三区91| 精品国产福利尤物免费| 在线观看免费人成视频色| 亚洲精品国自产拍在线观看| 亚洲理论片在线观看| 特级毛片A级毛片100免费播放 | 久久精品成人免费网站| a级毛片无码免费真人| 自拍偷自拍亚洲精品第1页| 亚洲免费观看网站| 中国精品一级毛片免费播放| 4399好看日本在线电影免费| 国产91精品一区二区麻豆亚洲| 亚洲av永久综合在线观看尤物| 精精国产www视频在线观看免费| 69式国产真人免费视频| 国产午夜亚洲精品午夜鲁丝片|