登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

BDB例子  

2010-08-06 17:03:43|  分类: .net技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、简单数据(String)存取
package test;
 import java.io.UnsupportedEncodingException; 
 import java.io.File;

import com.sleepycat.je.Cursor;
import com.sleepycat.je.CursorConfig;
 import com.sleepycat.je.Database; 
 import com.sleepycat.je.DatabaseConfig; 
 import com.sleepycat.je.DatabaseEntry; 
 import com.sleepycat.je.DatabaseException; 
 import com.sleepycat.je.Environment; 
 import com.sleepycat.je.EnvironmentConfig; 
 import com.sleepycat.je.LockMode; 
import com.sleepycat.je.OperationStatus;
 
public class BdbService {
     //数据库路径 
          private String dbPath; 
         private EnvironmentConfig envConfig; 
         private Environment env; 
         private Database bdb; 
         private String encoding = "UTF-8"; 
      /**
       * 
       * 打开数据库
       * @throws DatabaseException 
       * @throws EnvironmentLockedException 
       */ 
      public void open() throws DatabaseException{ 
            envConfig = new EnvironmentConfig(); 
            envConfig.setTransactional(true); 
            envConfig.setAllowCreate(true); 
            envConfig.setCacheSize(1024* 1024 *1);   //M
            try {         
                 env = new Environment(new File(dbPath),envConfig);           
            } catch (DatabaseException e) {           
                 e.printStackTrace();         
            } 
            DatabaseConfig dbConfig = new DatabaseConfig(); 
            dbConfig.setAllowCreate(true); 
             try { 
                 bdb = env.openDatabase(null, "bb", dbConfig); 
             } catch (DatabaseException e) { 
                 e.printStackTrace(); 
             } 
      } 
       
      public String get(String key) throws DatabaseException, UnsupportedEncodingException{ 
             DatabaseEntry queryKey = new DatabaseEntry(); 
             DatabaseEntry value = new DatabaseEntry(); 
             queryKey.setData(key.getBytes(encoding)); 
             OperationStatus status = bdb.get(null, queryKey, value,LockMode.DEFAULT); 
             if (status == OperationStatus.SUCCESS) { 
                 return new String(value.getData()); 
             } 
             return null; 
      
      } 
      
      public void put(String key,String value) throws DatabaseException, UnsupportedEncodingException{ 
             byte[] theKey = key.getBytes(encoding); 
             byte[] theValue = value.getBytes(encoding); 
             OperationStatus status = bdb.put(null, new DatabaseEntry(theKey), 
                     new DatabaseEntry(theValue)); 
             if(status == OperationStatus.SUCCESS) { 
      
             } 
      } 
     
      public void listStoreInfo()
      {
          Cursor cursor = null;
          CursorConfig config = new CursorConfig();
          config.setReadCommitted(true);
            //config.setDirtyRead(true);
           cursor = bdb.openCursor(null, config);   
           try{
               DatabaseEntry findKey = new DatabaseEntry();
               DatabaseEntry findValue = new DatabaseEntry();
               while(cursor.getNext(findKey,findValue, LockMode.DEFAULT)==OperationStatus.SUCCESS)
               {
                  String strKey = new String(findKey.getData(),this.encoding);
                  String strValue = new String(findValue.getData(),this.encoding);
                  System.out.println("key:"+strKey+"  /t value:"+strValue);
               }
           }catch(Exception ex)
           {
               ex.printStackTrace();
           }
           finally{
               cursor.close();
           }
          
      }
      /**
       * 关闭数据库
       * @throws DatabaseException 
       */ 
      public void close() throws DatabaseException{ 
          bdb.close(); 
          env.close(); 
      } 
      public String getDbPath() { 
       return dbPath; 
      } 
      
      public void setDbPath(String dbPath) { 
       this.dbPath = dbPath; 
      } 
      public static void main(String[] args) throws DatabaseException, UnsupportedEncodingException { 
       BdbService bdbService=new BdbService(); 
       bdbService.setDbPath("d:/tmp"); 
       bdbService.open();
       java.util.Date dt = new java.util.Date();
     
       for(int i = 0;i<10000;i++){
            bdbService.put("key"+i, "value"+i);
        }
       bdbService.listStoreInfo();
       System.out.println(dt.toString()+"  "+new java.util.Date().toString());
       System.out.println("完成时间:"+((new java.util.Date()).getTime()-dt.getTime())+"毫秒"); 
       bdbService.close(); 
      } 
}


2、类数据对象存取
package test;

import java.util.Date;

public class Suppliers implements java.io.Serializable{
    private String category ;

    public String getCategory() {
        return category;
    }
   
    public Date dt ;
   
    public Date getDt() {
        return dt;
    }

    public void setDt(Date dt) {
        this.dt = dt;
    }

    private String companyName ;
   
    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String toString()
    {
        return "category:"+category+" companyName:"+companyName;
    }
     
}

package test;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.CursorConfig;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;

public class BdbClsService {
   
    private StoredClassCatalog classCatalog;
    private String dbPath; 
    private EnvironmentConfig envConfig; 
    private Environment env; 
    private Database bdb,logbdb; 
    private String encoding = "UTF-8"; 
   
    public void open() throws DatabaseException{ 
        envConfig = new EnvironmentConfig(); 
        envConfig.setTransactional(true); 
        envConfig.setAllowCreate(true); 
        envConfig.setCacheSize(1024* 1024 *1);   //M
        try {         
             env = new Environment(new File(dbPath),envConfig);           
        } catch (DatabaseException e) {           
             e.printStackTrace();         
        } 
        DatabaseConfig dbConfig = new DatabaseConfig(); 
        dbConfig.setAllowCreate(true); 
         try { 
             bdb = env.openDatabase(null, "bb", dbConfig); 
             logbdb = env.openDatabase(null, "logbdb", dbConfig);
             classCatalog = new StoredClassCatalog(logbdb);
         } catch (DatabaseException e) { 
             e.printStackTrace(); 
         } 
    } 
   
    public Object get(String key,Class cls) { 
        DatabaseEntry queryKey = new DatabaseEntry(); 
        DatabaseEntry value = new DatabaseEntry();
       
        try {
            queryKey.setData(key.getBytes(encoding));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        OperationStatus status = bdb.get(null, queryKey, value,LockMode.DEFAULT); 
        if (status == OperationStatus.SUCCESS) { 
            EntryBinding dataBinding = new SerialBinding(classCatalog,
                    cls);
            return dataBinding.entryToObject(value);
        } 
        return null; 
 
    } 
   
    public List[] listStoreInfo(Class cls)
      {
          List[] retList = new List[2] ;
          retList[0] = new ArrayList();
          retList[1] = new ArrayList();
          Cursor cursor = null;
          CursorConfig config = new CursorConfig();
          config.setReadCommitted(true);
            //config.setDirtyRead(true);
           cursor = bdb.openCursor(null, config);
           try{
               DatabaseEntry findKey = new DatabaseEntry();
               DatabaseEntry findValue = new DatabaseEntry();
              
               while(cursor.getNext(findKey,findValue, LockMode.DEFAULT)==OperationStatus.SUCCESS)
               {
                  String strKey = new String(findKey.getData(),this.encoding);
                  EntryBinding dataBinding = new SerialBinding(classCatalog,
                          cls);
                  retList[0].add(new String(findKey.getData(),this.encoding));
                  retList[1].add(dataBinding.entryToObject(findValue));
                 
               }
           }catch(Exception ex)
           {
               ex.printStackTrace();
           }
           finally{
               cursor.close();
               return retList ;
           }
      }
   
    public void put(String s, Object obj) {
        // TODO Auto-generated method stub
         
        EntryBinding dataBinding = new SerialBinding(classCatalog,
                obj.getClass());
         
        DatabaseEntry keyEntry ;
        try {
            keyEntry = new DatabaseEntry(s.getBytes("UTF-8"));
            DatabaseEntry dataEntry = new DatabaseEntry();
            dataBinding.objectToEntry(obj, dataEntry);
            bdb.put(null, keyEntry, dataEntry);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
   
      public void setDbPath(String dbPath) { 
           this.dbPath = dbPath; 
          } 
   
     /**
       * 关闭数据库
       * @throws DatabaseException 
       */ 
      public void close() throws DatabaseException{ 
          bdb.close(); 
          logbdb.close();
          env.close(); 
      } 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         BdbClsService bdbService=new BdbClsService(); 
         bdbService.setDbPath("d:/tmp"); 
         bdbService.open();
         
         for(int i =0 ;i<10000;i++)
         {
             Suppliers supp = new Suppliers();
             supp.setCategory("category"+i);
             supp.setCompanyName("companyName"+i);
             supp.setDt(new Date());
             
             bdbService.put("key"+i, supp);
         }
         
         List[] list = bdbService.listStoreInfo(Suppliers.class);
         
         for(int i=0;i<list[0].size();i++)
         {
             Suppliers dataInfo = (Suppliers)list[1].get(i);
             
             System.out.println("Key:"+(String)list[0].get(i)+"  Value:"+dataInfo.toString());
         }
           Object obj = bdbService.get("key1", Suppliers.class) ;
          if(obj!=null){
            Suppliers supp1 = (Suppliers)obj;
            System.out.println(supp1.getCategory());
          }
          bdbService.close();
    }
 
}
  评论这张
 
阅读(1188)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018