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)
{
...
}