|
2. First Steps
Let us get started as simple as possible. We are going to learn how to store, retrieve, update and delete instances of a single class that only contains primitive and String members. In our example this will be a Formula One (F1) pilot whose attributes are his name and the F1 points he has already gained this season.
First we create a native class such as:
package com.db4o.f1.chapter1;
public class Pilot {
private String name;
private int points;
public Pilot(String name,int points) {
this.name=name;
this.points=points;
}
public int getPoints() {
return points;
}
public void addPoints(int points) {
this.points+=points;
}
public String getName() {
return name;
}
public String toString() {
return name+"/"+points;
}
}
| |
Note that this class does not contain any db4o related code.
2.1. Storing objects
To store an object, we simply open a db4o ObjectContainer and call set(), passing the object as a parameter.
Pilot pilot1=new Pilot("Michael Schumacher",100);
db.set(pilot1);
System.out.println("Stored "+pilot1);
| |
We'll need a second pilot, too.
Pilot pilot2=new Pilot("Rubens Barrichello",99);
db.set(pilot2);
System.out.println("Stored "+pilot2);
| |
Closing the ObjectContainer will release all resources associated with it.
2.2. Retrieving objects
To query the database for our pilot, we shall use Query by Example (QBE) for now. This means we will create a prototypical object for db4o to use as an example. db4o will retrieve all objects of the given type that contain the same (non-default) field values as the candidate. The result will be handed as an ObjectSet instance. We will use a convenience method 'listResult' to display a result's content and reset it for further use:
public static void listResult{
System.out.println(result.size());
while(result.hasNext()) {
System.out.println(result.next());
}
}
| |
To retrieve all pilots from our database, we provide an 'empty' prototype:
Pilot proto=new Pilot(null,0);
ObjectSet result=db.get(proto);
Util.listResult(result);
| |
Note that our results are not constrained to have 0 points, as 0 is the default value for int fields.
To query for a pilot by name:
Pilot proto=new Pilot("Michael Schumacher",0);
ObjectSet result=db.get(proto);
Util.listResult(result);
| |
Let's retrieve a pilot by exact points:
Pilot proto=new Pilot(null,100);
ObjectSet result=db.get(proto);
Util.listResult(result);
| |
Of course there's much more to db4o queries. We'll come to that in a moment.
2.3. Updating objects
To update an object already stored in db4o, just call set() again after modifying it.
ObjectSet result=db.get(new Pilot("Michael Schumacher",0));
Pilot found=(Pilot)result.next();
found.addPoints(11);
db.set(found);
System.out.println("Added 11 points for "+found);
retrieveAllPilots(db);
| |
Note that it is necessary that db4o already 'knows' this pilot, else it will store it as a new object. 'Knowing' an object basically means having it set or retrieved during the current db4o session. We'll explain this later in more detail.
To make sure you've updated the pilot, please return to any of the retrieval examples above and run them again.
2.4. Deleting objects
Objects are removed from the database using the delete() method.
ObjectSet result=db.get(new Pilot("Michael Schumacher",0));
Pilot found=(Pilot)result.next();
db.delete(found);
System.out.println("Deleted "+found);
retrieveAllPilots(db);
| |
Let's delete the other one, too.
ObjectSet result=db.get(new Pilot("Rubens Barrichello",0));
Pilot found=(Pilot)result.next();
db.delete(found);
System.out.println("Deleted "+found);
retrieveAllPilots(db);
| |
Please check the deletion with the retrieval examples above.
Again, the object to be deleted has to be known to db4o. It is not sufficient to provide a prototype object with the same field values.
2.5. Conclusion
That was easy, wasn't it? We have stored, retrieved, updated and deleted objects with a few lines of code. But what about complex queries? Let's have a look at the restrictions of QBE and alternative approaches in the next chapter.
2.6. Full source
package com.db4o.f1.chapter1;
import java.io.File;
import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.f1.Util;
public class FirstStepsExample {
public static void main(String[] args) {
new File(Util.YAPFILENAME).delete();
ObjectContainer db=Db4o.openFile(Util.YAPFILENAME);
try {
storeFirstPilot(db);
storeSecondPilot(db);
retrieveAllPilots(db);
retrievePilotByName(db);
retrievePilotByExactPoints(db);
updatePilot(db);
deleteFirstPilotByName(db);
deleteSecondPilotByName(db);
}
finally {
db.close();
}
}
public static void storeFirstPilot(ObjectContainer db) {
Pilot pilot1=new Pilot("Michael Schumacher",100);
db.set(pilot1);
System.out.println("Stored "+pilot1);
}
public static void storeSecondPilot(ObjectContainer db) {
Pilot pilot2=new Pilot("Rubens Barrichello",99);
db.set(pilot2);
System.out.println("Stored "+pilot2);
}
public static void retrieveAllPilots(ObjectContainer db) {
Pilot proto=new Pilot(null,0);
ObjectSet result=db.get(proto);
Util.listResult(result);
}
public static void retrievePilotByName(ObjectContainer db) {
Pilot proto=new Pilot("Michael Schumacher",0);
ObjectSet result=db.get(proto);
Util.listResult(result);
}
public static void retrievePilotByExactPoints(ObjectContainer db) {
Pilot proto=new Pilot(null,100);
ObjectSet result=db.get(proto);
Util.listResult(result);
}
public static void updatePilot(ObjectContainer db) {
ObjectSet result=db.get(new Pilot("Michael Schumacher",0));
Pilot found=(Pilot)result.next();
found.addPoints(11);
db.set(found);
System.out.println("Added 11 points for "+found);
retrieveAllPilots(db);
}
public static void deleteFirstPilotByName(ObjectContainer db) {
ObjectSet result=db.get(new Pilot("Michael Schumacher",0));
Pilot found=(Pilot)result.next();
db.delete(found);
System.out.println("Deleted "+found);
retrieveAllPilots(db);
}
public static void deleteSecondPilotByName(ObjectContainer db) {
ObjectSet result=db.get(new Pilot("Rubens Barrichello",0));
Pilot found=(Pilot)result.next();
db.delete(found);
System.out.println("Deleted "+found);
retrieveAllPilots(db);
}
}
| |
-- generated by Doctor courtesy of db4objecs Inc.
|