目前分類:db4o (3)

瀏覽方式: 標題列表 簡短摘要

在 java 中的時間有 Date 及 Calendar 二個類別,Date 是從 JDK 1.0 就有的類別,很多方法都已經被 Calendar 所取代了。想當然爾,一定是使用 Calendar 來當做時間欄位,因為比較新嘛,也避免 Date 類別最後被 phaseout,那就完蛋了。但是很不幸的是 db4o 卻無法儲存 Calendar 欄位,但可以儲存 Date 欄位,不知為什麼,功力還不深,只知其然,不知其所以然。

// 可以利用下列方式把 Date 轉換成 Calendar
Calendar date=Calendar.getInstance();
date.setTime(transaction.getDate());

1/14 又發現 Calendar 是可以儲存的,不知是不是同一個資料庫存在二個 Calendar 的關係?不過,在 db4o 所附的 OME 發現 Date 被當成一個基礎類別,而 Calendar 卻是一個複雜的類別。看來以後還是以 Date 類別為主比較好,少用 Calendar。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

當我在測試 db4o-7.4\doc\tutorial\src\com\db4o\f1\chapter3\CollectionsExample.java 時,發現了一個大問題。原本整個範例是沒有什麼問題,但是當我把原始碼做了一些修正之後,卻出現很奇怪的問題。在 api doc 裏有提到 Db4o.configure() 即將被捨棄,改用 Db4o.newConfigure() 代替。想當然爾,在以後的程式碼裏當然是用 Db4o.newConfigure(),而不會去用 Db4o.configure()。但是如果你真的如此做,你就完蛋了,因為 Db4o.newConfigure() 的 cascadeOnUpdate 對 List 無法產生作用,反而用 Db4o.configure() 才是對的。

public static void updateCarPart1() {
    Db4o.configure().objectClass(Car.class).cascadeOnUpdate(true);
}
改成
public static void updateCarPart1() {
    Db4o.newConfigure().objectClass(Car.class).cascadeOnUpdate(true);
}

會發現結果是 Ferrari[Michael Schumacher/100]/1 : 1261126146125 : 0.1,0.2,0.3 這一個應該產生的結果,卻沒有生效;也就是說 update 對 List 沒有作用。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

add library 新增函式庫

  1. 在 eclipse 裏要使用 db4o 需先加入 db4o 的 jar 檔,我發現只要加入 java5.jar 即可,其它的 jar 檔不需要加入。
  2. Project → Properties → Java Build Path → Libraries → Add External JARs,加入 db4o-7.4\lib\db4o-7.4.120.14002-java5.jar。

open/close database 開啟/關閉資料庫

  1. open database
    ObjectContainer db=Db4o.openFile(filename);
    
  2. close database
    db.close();
    

storing objects 新增物件到資料庫

  1. storing objects
    db.store(object);
    
  2. examples
    Pilot pilot1=new Pilot("Michael Schumacher",100);
    db.store(pilot1);
    

retrieving objects 從資料庫取出物件

db4o 提供三種查詢方法,後面再提。
  1. Query by Example (QBE)
  2. Native Queries (NQ)
  3. the SODA Query API (SODA)

updating objects 更新資料庫的物件

  1. 更新物件跟新增物件都是使用同一個函數。
    db.store(object);
    
  2. examples
    ObjectSet result=db.queryByExample(new Pilot("Michael
    Schumacher",0));
    Pilot found=(Pilot)result.next();
    found.addPoints(11);
    db.store(found);
    System.out.println("Added 11 points for "+found);
    retrieveAllPilots(db);
    

deleteing objects 刪除資料庫的物件

  1. deleteing objects
    db.delete(object);
    
  2. examples
    ObjectSet result=db.queryByExample(new Pilot("Michael
    www.db4o.com
    Schumacher",0));
    Pilot found=(Pilot)result.next();
    db.delete(found);
    System.out.println("Deleted "+found);
    retrieveAllPilots(db);
    

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()