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

          berkeleydb

          Posted on 2013-03-06 17:58 whitesky 閱讀(197) 評論(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 使用手冊

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


          網站導航:
           
          主站蜘蛛池模板: 桐城市| 郓城县| 大竹县| 卓资县| 襄城县| 嫩江县| 武宁县| 于田县| 荣成市| 万源市| 那坡县| 威宁| 根河市| 永新县| 义马市| 嘉祥县| 清远市| 绥江县| 封开县| 始兴县| 资源县| 琼海市| 石城县| 苏尼特右旗| 台中县| 轮台县| 云阳县| 淮阳县| 阿拉善盟| 西吉县| 新兴县| 方正县| 德格县| 乡宁县| 马山县| 高清| 霞浦县| 宽甸| 镇宁| 翁牛特旗| 太仓市|