1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          面向對象的數據庫db4o- 安裝并使用db4o

          來源:互聯網轉載 時間:2023-12-11 15:43:07

          為什么80%的碼農都做不了架構師?>>>

          下載和安裝db4o

          db4o 所有最新的版本都可以直接在官方網站上下載,進入 db4o 的下載頁面,我們可以看到最新的 for Java 穩定版本,包括 JAR、源代碼、入門文檔、API 等內容的完整的打包文件只有 6 MB,db4o 還有一個對象數據庫管理工具 ObjectManager,目前版本是 1.8。

          接著在 Eclipse 中新建 Java 項目,把 db4o 對象數據庫引擎包 db4o-8.0.249.16098-all-java5.jar 導入進項目。由于 db4o 支持多種版本的 JDK,除了 for JDK 5.0 的 db4o-8.0.249.16098-all-java5.jar 外,還有 for JDK 1.1、1.2-1.4 的 JAR 包,以適應多種環境。與 Hibernate、iBATIS SQL Maps 相比,db4o 更加自然,無需過多地引用第三方支持庫。

          db4o的包結構

          db4o 怎樣進行對象持久化呢?通過瀏覽目錄可以發現,與傳統的 RDBMS 一樣,db4o 也有自己的數據庫文件, 在 db4o 中數據庫文件的后綴名是“*.yap”。讓我們先來了解一下 db4o 對象數據庫引擎的主要包結構:

          • com.db4o
            com.db4o 包含了使用 db4o 時最經常用到的功能。兩個最重要的接口是 com.db4o.Db4o 和 com.db4o.ObjectContainer。com.db4o.Db4o 工廠是運行 db4o 的起點,這個類中的靜態方法可以開啟數據庫文件、啟動服務器或連接一個已經存在的服務器,還可以在開啟數據庫之前進行 db4o 環境配置。com.db4o.ObjectContainer 接口很重要,開發過程中 99% 的時間都會用到它,ObjectContainer 可在單用戶模式下作為數據庫實例,也可作為 db4o 服務器的客戶端。每個 ObjectContainer 實例都有自己的事務。所有的操作都有事務保證。當打開 ObjectContainer,就已經進入事務了,commit() 或 rollback() 時,下一個事務立即啟動。每個 ObjectContainer 實例維護它自己所管理的已存儲和已實例化對象,在需要 ObjectContainer 的時候,它會一直保持開啟狀態,一旦關閉,內存中數據庫所引用的對象將被丟棄。

          • com.db4o.ext
            你也許想知道為什么在 ObjectContainer 中只能看見很少的方法,原因如下:db4o 接口提供了兩個途徑,分別在 com.db4o 和 com.db4o.ext 包中。這樣做首先是為了讓開發者能快速上手;其次為了讓其他產品能更容易的復制基本的 db4o 接口;開發者從這一點上也能看出 db4o 是相當輕量級的。每個 com.db4o.ObjectContainer 對象也是 com.db4o.ext.ExtObjectContainer 對象??梢赞D換成 ExtObjectContainer 獲得更多高級特性。

          • com.db4o.config
            com.db4o.config 包含了所有配置 db4o 所需的類。

          • com.db4o.query
            com.db4o.query 包包含了構造“原生查詢, NQ(Native Queries)”所需的 Predicate 類。NQ 是 db4o 最主要的查詢接口。

          初始化數據庫

          db4o 提供兩種運行模式,分別是本地模式和服務器模式。本地模式是指直接在程序里打開 db4o 數據庫文件進行操作:

          Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),"auto.yap");

          而服務器模式則是客戶端通過 IP 地址、端口以及授權口令來訪問服務器:

          服務器端:

          ObjectServerserver=Db4oClientServer.openServer("auto.yap",1212); server.grantAccess("admin","1");

          客戶端:

          //ip為服務器的ip地址 Db4oClientServer.openClient(ip,1212,"admin","1");

          需要注意的是db4o會自動創建數據庫文件,但是并不會創建數據庫文件目錄,比如我想創建數據庫文件”/export/db4o/auto.yap”,db4o并不會自動創建”/export/db4o”目錄 ,所以創建數據庫文件時最好初始化下數據庫目錄:

          privatevoidinitDBFile(StringdbName){ Filefile=newFile(dbName); if(file.exists()){ return; } List<File>fList=newArrayList<File>(); FilepFile=file.getParentFile(); while(!pFile.exists()){ fList.add(pFile); pFile=pFile.getParentFile(); } for(inti=fList.size()-1;i>=0;i--){ Filef=fList.get(i); f.mkdir(); } }


          使用數據庫

          上面介紹的兩種方式都可以得到 ObjectContainer 實例,就目前Java EE的分布式的應用環境來看,服務器模式更有現實意義;而本地模式更適合于單服務器應用。因為分布式模式比較常用,本文在下面的例子都將采用分布式模式。

          在下面的例子中,會使用一個UserVO對象,然后介紹db4o對該對象的CRUD。

          UserVO對象

          publicclassUserVOimplementsSerializable{ privatestaticfinallongserialversionuid=-9129148024922569814L; privateStringuserName; privateStringpassword; publicUserVO(){} publicUserVO(StringuserName,Stringpassword){ this.userName=userName; this.password=password; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetUserName(){ returnuserName; } publicvoidsetUserName(StringuserName){ this.userName=userName; } @Override publicbooleanequals(Objectobj){ if(this==obj){ returntrue; } if(!(objinstanceofUserVO)){ returnfalse; } UserVOother=(UserVO)obj; if(!(userName==null?other.userName==null:userName.equals(other.userName))){ returnfalse; } if(!(password==null?other.password==null:password.equals(other.password))){ returnfalse; } returntrue; } @Override publicinthashCode(){ finalintprime=31; intresult=17; result=prime*result+((userName==null)?0:userName.hashCode()); result=prime*result+((password==null)?0:password.hashCode()); returnresult; } @Override publicStringtoString(){ return"UserVO[userName="+userName+",password="+password+"]"; } }

          增加(Create)

          publicstaticvoidmain(String[]args){ UserVOvo=newUserVO("admin","1"); //打開數據庫,ip為服務器ip ObjectContainerdb=Db4oClientServer.openClient(ip,1212,"admin","1"); try{ //存儲數據 db.store(vo); //提交事務 db.commit(); }catch(Exceptione){ //出現異常則回滾 db.rollback(); }finally{ //關閉連接 db.close(); } }

          讀取(Retrieve)

          publicstaticvoidmain(String[]args){ //打開數據庫 ObjectContainerdb=Db4oClientServer.openClient(ip,1212,"admin","1"); try{ //構造查詢對象 Queryquery=db.query(); //設置被約束實例 query.constrain(UserVO.class); //設置被約束實例的字段和約束條件 query.descend("userName").constrain("admin"); //查詢對象 ObjectSet<UserVO>list=query.execute(); //dosomethingwithlist }finally{ //關閉連接 db.close(); } }

          更新(Update)

          publicstaticvoidmain(String[]args){ //打開數據庫 ObjectContainerdb=Db4oClientServer.openClient(ip,1212,"admin","1"); try{ ObjectSet<UserVO>result=db.query(newPredicate<UserVO>(){ privatestaticfinallongserialVersionUID=1554763863522546547L; publicbooleanmatch(UserVOvo){ //匹配userName為admin的UserVO returnvo.getUserName().equals("admin"); } }); if(result.size()!=1){ thrownewRuntimeException("sizedoesnotmatched."); } UserVOvo=result.next(); //修改passport vo.setPassword("0"); db.store(vo); db.commit(); }catch(Exceptione){ db.rollback(); }finally{ //關閉連接 db.close(); } }

          刪除(Delete)

          publicstaticvoidmain(String[]args){ UserVOvo=newUserVO("admin","1"); //打開數據庫 ObjectContainerdb=Db4oClientServer.openClient(ip,1212,"admin","1"); try{ ObjectSet<UserVO>result=db.query(newPredicate<UserVO>(){ privatestaticfinallongserialVersionUID=-4397123083792023957L; publicbooleanmatch(UserVOvo){ //匹配userName為admin的UserVO returnvo.getUserName().equals("admin"); } }); if(result.size()!=1){ thrownewRuntimeException("sizedoesnotmatched."); } UserVOvo=result.next(); db.delete(vo); db.commit(); }catch(Exceptione){ db.rollback(); }finally{ //關閉連接 db.close(); } }

          結論

          通過本系列文章,db4o 的優勢已經體現得淋漓盡致,它的添加、更新、刪除是如此的簡單,正如 db4o 的口號那樣——“僅需一行代碼就能存儲復雜結構對象,極大的降低了開發時間和成本,提供高效的性能,無需 DBA 干預”。

          如本文有不詳盡之處,大家可以參考官方的《用戶指南》,db4o 中文社區正在火熱成長!

          參考資料

          學習

          • db4o官方網站。

          • 面向對象數據庫 db4o 之旅系列:查看此系列文章完整列表。

          • ODMG 官方網站:了解 ODMG 技術。

          獲得產品和技術

          • 下載 db4o 免費版。

          轉載于:https://my.oschina.net/xionghui/blog/489727

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          如何測試micro sd卡速度?要測試sd卡的速度,可以使用MyDiskTest軟件,不僅可以檢測存儲卡的真偽,還可以檢測存儲卡的讀寫速度。MyDiskTest是一款u盤擴展檢測工具,具有擴展檢測、壞塊掃描、速度測試、老化測試、壞塊屏蔽五大功能。也是識別u盤、SD卡、CF卡等移動存儲產品擴容的工具,可以輕松檢測存儲產品是否擴容、以次充好。怎么看U盤是否是正版?使用MyDiskTwin10怎么查看U...

          天津梅江屬于哪個區 天津梅江屬于哪個區?天津梅江會展中心在哪? 天津梅江屬于天津市河西區!位于天津市南部,河西區、津南區、西青區交匯處。地理位置優越:距市中心區6公里,高教區8公里,濱海國際機場21公里,津滬高速公路交叉口14公里,津京塘高速公路交叉口23公里。所有這些都使梅江成為一個具有巨大升值潛力的地區。 天津梅江會展中心在哪里? 天津梅江會展中心屬于天津西青區。梅江會展中心位于西青區...

          綏化市是黑龍江省的一個地級市,隸屬于黑龍江省管轄。綏化位于黑龍江省中部,松嫩平原呼蘭河流域。是黑龍江省重要的交通樞紐,省內六大客貨運中轉站之一,哈爾濱北部重要的區域性中心城市,東與森林之都伊春,省會哈爾濱,西與大慶,北與黑河,西北與鶴城齊齊哈爾。綏化市是一個地級市,轄一區三市六縣。綏化是黑龍江省的一個地級市,轄1區3縣級市6縣。綏化主城區人口約48萬。綏化市是黑龍江省的一個地級市,隸屬于黑龍江省。...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>