Windows Phone 7 Perst数据库的一些常用的类和方法

一、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嵌入式数据库的介绍

posted on 2011-03-30 21:23  linzheng  阅读(1111)  评论(0编辑  收藏  举报

导航