niedziela, 5 czerwca 2011

db4o - Prosta baza danych dla aplikacji java!

Ostatnio zastanawiałem się jak przechowywać dane pomiędzy uruchomieniami aplikacji. Szukając rozwiązań w internecie trafiłem na db4objects http://db4o.com/.

db4o jest bazą embedded przechowującą całe obiekty. Całość działa szybko i jest bardzo prosta w implementacji.

Potrzebne biblioteki pobieramy z tej strony:
http://db4o.com/DownloadNow.aspx -> db4o 8.0 for Java (zip, 40.9 mb).
Rejestracja jest opcjonalna.

Wg pliku \db4o-8.0-java\db4o-8.0\lib\readme.html wystarczy nam biblioteka db4o-8.0.184.15484-core-java5.jar ale do projektu dodajemy również db4o-8.0.184.15484-cs-java5.jar ponieważ wg API (dołączone do paczki) potrzebna nam metoda w klasie Db4o jest zdeprecjonowana.


Oto krótki przykład zastosowania:
/* Main.java */
import com.db4o.ObjectContainer;
import com.db4o.ObjectServer;
import com.db4o.cs.Db4oClientServer;
import com.db4o.query.Predicate;
import java.util.List;

public class Main
{
    static ObjectServer os;
    
    public static void main(String[] args)
    {
        os = Db4oClientServer.openServer("TestDB", 0);
        
        saveToDB();
        loadFromDB();
        
        os.close();
    }
    
    public static void saveToDB()
    {
        ObjectContainer oc = os.openClient();
        oc.store(new SomeObject());
        oc.close();
    }
    
    public static void loadFromDB()
    {
        ObjectContainer oc = os.openClient();
        
        List list = oc.query(new Predicate()
                {
                    public boolean match(SomeObject so)
                    {
                        return so.getClass().getName().equals("SomeObject");
                    }
                });
        
        for(SomeObject so : list)
        {
            System.out.println(so.x+" "+so.y);
        }
        
        oc.close();
    }
}

/* SomeObject.java */
import java.util.Random;

public class SomeObject
{
    public int x;
    public int y;
    
    public SomeObject()
    {
        Random r = new Random();
        
        x = r.nextInt(10);
        y = r.nextInt(100);
    }
}

Wynik 3-krotnego uruchomienia aplikacji, widać że dane są zachowywane:
run:
6 58
3 42
6 22
BUILD SUCCESSFUL (total time: 1 second)

Jak widać potrzebne obsługa bazy jest banalnie prosta, potrzebne linie to:

ObjectServer os = Db4oClientServer.openServer("TestDB", 0); //otworzenie serwera

ObjectContainer oc = os.openClient(); //otworzenie klienta

oc.store(new SomeObject()); //zapisanie obiektu do bazy

//pobranie obiektów SomeObject z bazy
List list = oc.query(new Predicate()
                {
                    public boolean match(SomeObject so)
                    {
                        return so.getClass().getName().equals("SomeObject");
                    }
                });

oc.close(); //zamknięcie klienta

os.close(); //zamknięcie serwera

Metoda openServer() w razie potrzeby utworzy nowy serwer pod podaną nazwą, a jeśli chcemy aby był to serwer TCP zamiast 0 podajemy numer portu pod jakim ma działać.

Pokazane tutaj zastosowanie jest najprostszym z możliwych ale baza ta jest o wiele bardziej rozbudowana.

Brak komentarzy:

Prześlij komentarz