PAiN DB Quick Start
import net.sourceforge.pain.db.*; import java.util.*; /** Any subclass of DbObject is persistent object */ public class MyDataObject extends DbObject { /** This constructor is used by PAiN DB during startup. * No field access allowed from it. */ public MyDataObject() { } /** This constructor is used by user for new objects creation * object is atteched to given database. * Object schema is automatically imported to db */ public MyDataObject(PainDB db) throws RuntimeException { super(db); } /** method called by database every time new class added to database * (one per class)*/ protected DbClassSchema provideSchema() { byte[] types = new byte[3]; String[] names = new String[3]; types[0] = DbType.INT; names[0] = "my_int_field"; types[1] = DbType.STRING; names[1] = "my_string_field"; types[2] = DbType.REFERENCE_SET; names[2] = "my_references"; return new DbClassSchema(types, names); } public int getMyIntField() { return getInt(0); } public void setMyIntField(int value) { setInt(0, value); } public String getMyStringField() { return getString(1); } public void setMyStringField(String value) { setString(1, value); } public Set getMyReferences() { return getRefSet(2); } }
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) throws Exception { 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(); } }
TODO...
Copyright c 2002-2003, Mike Fursov <fmike@mail.ru>
Vote for our project!