import net.sourceforge.pain.db.*;
import java.util.*;
public class PainDBQuickStart {
public static void main(String[] args) throws Exception {
final PainDB db = new PainDB("mydbfile");
// Example 1: new object creation
db.beginTransaction();
MyDataObject obj = new MyDataObject(db);
obj.setMyIntField(10);
obj.setMyStringField("Hello World!");
db.commitTransaction();
// Example 2: transparent collections support
db.beginTransaction();
for (int i = 0; i < 100; i++) {
MyDataObject myReference = new MyDataObject(db);
myReference.setMyStringField("my_reference");
obj.getMyReferences().add(myReference);
}
db.commitTransaction();
//Example 3: rollback
db.beginTransaction();
for (Iterator it = obj.getMyReferences().iterator(); it.hasNext();) {
MyDataObject myReference = (MyDataObject) it.next();
it.remove();
myReference.delete();
}
db.rollbackTransaction(); // here all changes done in last transaction will be rolled back
//Example 4: savepoints (subtransactions)
db.beginTransaction();
obj.setMyStringField("new value 1");
db.beginTransaction(); // internal transaction (savepoint)!
obj.setMyStringField("new value 2");
db.rollbackTransaction(); // here we rolling back all changes done in internal transaction
db.commitTransaction(); // commiting all changes done in first level transaction
//Example 5: transaction wrapper, it's convinient to never write commit or rollback :)
DbTransaction t = new DbTransaction() {
public Object execute(Object[] params) {
MyDataObject myDataObject = new MyDataObject(db);
myDataObject.setMyStringField("this transaction will be commited if no exception thrown!");
return null;
}
};
db.execute(t);
//Example 6: Subtransactions wrapping.
DbTransaction t1 = new DbTransaction() {
public Object execute(Object[] params) throws Exception {
final MyDataObject myDataObject = new MyDataObject(db);
myDataObject.setMyStringField("value1");
DbTransaction t2 = new DbTransaction() {
public Object execute(Object[] params) throws Exception {
myDataObject.setMyStringField("value2");
return null;
}
};
db.execute(t2);
assert(myDataObject.getMyStringField().equals("value2"));
return null;
}
};
db.execute(t1);
//example 7: automatic removal all references during object deletion
db.beginTransaction();
MyDataObject obj7_1 = new MyDataObject(db);
MyDataObject obj7_2 = new MyDataObject(db);
obj7_1.getMyReferences().add(obj7_2);
assert (obj7_1.getMyReferences().contains(obj7_2));
obj7_2.delete();
assert (obj7_1.getMyReferences().isEmpty());
db.commitTransaction();
db.close();
}
}