db4o

From XennisWiki
Jump to: navigation, search

db4o (database for objects) ist eine Objektdatenbank für die Java- und .NET-Plattform und gehört zu den NoSQL-Datenbanken. Die db4o-Programmbibliothek zeichnet sich durch einen vergleichsweise geringen Speicherbedarf von etwa 600 kB aus. (Wikipedia)

Download und Installation (Eclipse Integration)

Weitere Hilfe: in dem heruntergeladenem Ordner ome/readme.html

Voraussetzung

Download

  • Lade db4o 8.0 for Java herunter und entpack es
  • Entacke das ObjectManagerEnterprise-Java-8.0.0.zip, welches du in dem Ordner ome findet

Installation Eclipse-Plugin

  • (Eclipse) Help > Install New Software > Add > Local > den zuletzt entpackten Ordner auswählen
  • Folge den Installtionsanweisungen
  • Window > Oper Perspective > Other > OME auswählen

Beispiel - Query By Example, Native Queries & SODA im Vergleich

Eclipse-Projek Einstellungen

  • Libraries aus dem heruntergeladenem db4o-Zip, die im Java Build Path eingebunden wurden
    • ant.jar
    • bloat-1.0.jar
    • db4o-8.0.x.x-all-java5.jar
    • db4o-8-0.x.x-nqopt-java5.jar
  • Außerdem wurde das folgende jar eingebunden
    • objectmanager-api.jar

Das folgende Programm stellt an die Datenbank mit den drei verschiedenen Anfragesprache Query By Example, Native Queries und SODA jeweils die gleiche Anfrage.

import java.util.List;

import demo.objectmanager.model.*;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.config.EmbeddedConfiguration;
import com.db4o.query.Predicate;
import com.db4o.query.Query;

/**
 * Ein Vergleich der drei db4o-Anfragesprachen:
 *  - Query By Example
 *  - Native Queries
 *  - SODA
 */
public class Aufg2c {

	public static String DB_PATH = "./db/car.db";
	
	public static void main(String[] args) {
		db4o();
	}

	/**
	 * Ruft die Methoden mit den drei verschiedenen Anfragesprachen auf und gibt
	 * die Ergebnisse aus.
	 */
	private static void db4o() {
		/* Oeffne die Datenbank */
		EmbeddedConfiguration conf = Db4oEmbedded.newConfiguration();			
		ObjectContainer db = Db4oEmbedded.openFile(conf, DB_PATH);

		try {
			printAdressList(queryByExample(db));
			printAdressList(nativeQueries(db));
			printAdressList(soda(db));
		} finally {
			/* Schliesse die Datenbank */
			db.close();
		}
	}

	/**
	 * Query By Example (QBE)
	 * 
	 * @param db
	 *            Datenbank als ObjectContainer
	 * @return Liste aller Adressen mit Straßenname "0 street"
	 */
	private static List<Address> queryByExample(ObjectContainer db) {
		Address example = new Address();
		example.setStreet("0 street");

		return db.queryByExample(example);
	}

	/**
	 * Native Queries
	 * 
	 * @param db
	 *            Datenbank als ObjectContainer
	 * @return Liste aller Adressen mit Straßenname "0 street"
	 */
	private static List<Address> nativeQueries(ObjectContainer db) {
		List<Address> result = db.query(new Predicate<Address>() {

			private static final long serialVersionUID = 1L;

			@Override
			public boolean match(Address adress) {
				return adress.getStreet().equals("0 street");
			}
		});

		return result;
	}

	/**
	 * SODA
	 * 
	 * @param db
	 *            Datenbank als ObjectContainer
	 * @return Liste aller Adressen mit Straßenname "0 street"
	 */
	private static List<Address> soda(ObjectContainer db) {
		Query query = db.query();
		query.constrain(Address.class);
		query.descend("street").constrain("0 street");

		return query.execute();
	}

	/**
	 * Gibt den Konakt zu den uebergebenen Adressen aus.
	 * 
	 * @param result
	 *            List mit Strassen
	 */
	private static void printAdressList(List<Address> result) {
		for (Address address : result) {
			System.out.println(address.getContact());
		}
		System.err.println("#######################################################");
	}
}

See also

External links