一、Perst.Database類
Database是Perst提供資料庫類,這個類相當於類比了關係型資料庫。資料庫類允許你建立/刪除表,添加/刪除索引,建立/更新/刪除記錄,編寫和執行查詢。當然這些都是通過面
向對象來處理的。
Database(Storage storage); //利用Storage執行個體建立資料庫
Database(Storage storage, bool multithreaded); //是否支援多線程
Database(Storage storage,bool multithreaded,bool autoRegisterTables,FullTextSearchHelper helper);
autoRegisterTables 當一個新的執行個體插入資料庫的時候自動建立表
Type: Perst.FullText.FullTextSearchHelper 全域索引協助
Database.Storage 屬性 擷取與Database關聯的Storage
Database.EnableAutoIndices 屬性 是否允許自動索引
int Database.CountRecords(Type table)
int Database.CountRecords(Type table,bool forUpdate)
返回表的記錄總數 表就是你定義的儲存資料的類
如果表正在更新,傳入forUpdate參數為true防止死結
public bool CreateIndex(Type table,string key,bool unique)
返回true表示建立成功 false表示索引已經建立了
table 表的類型
key 表的欄位
unique 是否唯一
public bool DropIndex(Type table,string key) //刪除索引
public bool CreateTable(Type table) //建立一個表
public bool DropTable(Type table) //刪除表
public bool DeleteRecord(Object record)
public bool DeleteRecord(Type table,Object record) //刪除記錄 record記錄的執行個體
public IEnumerable GetRecords(Type table)
public IEnumerable GetRecords(Type table,bool forUpdate) //返回表的所有記錄
public FullTextSearchResult Search(FullTextQuery query,int maxResults,int timeLimit)
public FullTextSearchResult Search(string query,string language,int maxResults,int timeLimit) //查詢
public FullTextSearchResult SearchPrefix(string prefix,int maxResults,int timeLimit,bool sort)
//通過首碼查詢 查詢所有包含prefix首碼的記錄
public IEnumerable Select(Type table,string predicate)
//相當於sql的select語句 predicate是條件相當於 where後面的語句
public void UpdateKey(Object record,string key,Object value)
public void UpdateKey(Type table,Object record,string key,Object value) //更新一條記錄的某個欄位
二、Perst.Storage資料存放區類
Storage storage = StorageFactory.Instance.CreateStorage()建立一個storage的新的執行個體
storage.Open("PerstDemoDB.dbs"); // Storage通過資料庫路徑開啟資料庫
Query CreateQuery() //建立一個查詢對象
int GetOid(Object obj) //擷取記錄對象的唯一Oid值
Object GetProperty(string name) //擷取記錄對象的某一屬性的值
--------------------------------------------------------------------
使用Storage和Database實現資料庫資料備份和匯入XML
資料備份
Storage db = StorageFactory.Instance.CreateStorage();
db.Open("test.dbs", PagePoolSize); //開啟資料庫
FileStream stream = new FileStream("test.bck" ,FileMode.Create, FileAccess.Write);
db.Backup(stream); //Database的備份方法
stream.Close();
db.Close();
匯出XML
Storage db = StorageFactory.Instance.CreateStorage();
db.Open("test1.dbs", PagePoolSize);
StreamWriter writer = new StreamWriter("test.xml");
db.ExportXML(writer);
writer.Close();
db.Close();
db.Open("test2.dbs", PagePoolSize);
Reader reader = new StreamReader("test.xml");
db.importXML(reader); // //Database的匯出XML的方法
reader.Close();
db.Close();
---------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////
Perst.Persistent類 Perst資料庫裡面的表必須要繼承這個基類
Persistent.Oid 屬性 每一個Persistent對象都會有一個唯一的Oid值
Persistent.Storage 屬性 Persistent對象所歸於的儲存Storage對象
Store() 儲存記錄
Deallocate() 刪除記錄
文法如:
using Perst;
public class YourPersistentClass : Persistent {
int x;
String y;
Link links;
...
void doUpdate() {
x = 1;
y = "Hello World";
links = Storage.CreateLink();
Store(); // save changes in the database
}
}
三、Perst.FullText.FullTextSearchResult類和Perst.FullText.FullTextSearchHit類
這兩個類常用於資料庫的全文檢索搜尋,非常方便文法也很簡潔
Perst.FullText.FullTextSearchResult類 全部文本搜尋的結果集
public FullTextSearchHit[] Hits
FullTextSearchResult.Hits 屬性返回FullTextSearchHit數組
Perst.FullText.FullTextSearchHit類 是FullTextSearchResult 的結果集的子集元素
public FullTextSearchHit(Storage storage,int oid,float rank)//建立一個FullTextSearchHit
FullTextSearchHit.Document 是資料庫的某個表對象的一條記錄Object對象
FullTextSearchHit.Rank 排序float類型
四、Perst.CodeGenerator 提供支援Perst的JSQL文法查詢的類
Perst.CodeGenerator 的方法如下
void Predicate(Code code) //根據查詢條件查詢
Perst.Code
下面的是SQL語句對應的Perst的JSQL語句的寫法 個人感覺這個JSQL的文法不好用
------------------------------------------------------------------------------------
SQL查詢
SELECT * FROM Car WHERE color IN ('black, 'silver')
AND mileage < 100000 AND price < 20000 AND (airCondition OR climatControl)
ORDER By price desc, model asc;
CodeGenerator查詢
Perst.Query query = db.CreateQuery(typeof(Car));
CodeGenerator code = query.GetCodeGenerator();
code.Predicate(code.And(code.And(code.And(
code.In(code.Field("color"), code.List(code.Literal("black"), code.Literal("silver"))
),
code.Lt(code.Field("mileage"), code.Literal(10000))
),
code.Lt(code.Field("price"),code.Literal(20000))
),
code.Or(code.Field("airCondition"), code.Field("climatControl"))
)
);
code.OrderBy("price", false);
code.OrderBy("model", true);
foreach (Car car in query)
{
...
}
------------------------------------------------------------------------
sql查詢文法
select * from Person where salary > 10000 and age <= 40 order by name ;
使用Perst Database查詢文法
foreach (Person p in db.Select(typeof(Person), "salary > 10000 and age <= 40 order by name"))
{
...
}
使用Perst CodeGenerator的文法
Query query = db.CreateQuery(typeof(Person));
CodeGenerator code = query.GetCodeGenerator();
code.Predicate(code.And(code.Gt(code.Field("salary"), code.Literal(10000)),
code.Le(code.Field("age"), code.Literal(40))));
code.OrderBy("name");
foreach (Person p in query)
{
...
}
Perst嵌入式資料庫的介紹