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


本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078623

相关文章
|
10月前
|
Ubuntu Unix Linux
在Windows上轻松安装和使用Ubuntu的方法详解
继续点击“Continue”按钮以继续安装流程,随后选择清理磁盘并安装操作系统的选项。 接下来,在安装过程中,你需要选择时区。为了与你的地理位置相匹配,请选择中国上海作为你的时区设置。 在安装过程中,你还需要设置计算机的名称以及账号密码。请务必牢记这些信息,因为它们将作为你登录系统的凭证。
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1710 1
|
11月前
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
数据库
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
|
9月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1299 0
|
10月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
972 10
|
11月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
529 11
|
存储 算法 Java
实现不同数据库的表间的 JOIN 运算的极简方法
跨库计算是数据分析中的常见难题,尤其涉及多数据库系统时,表间 JOIN 操作复杂度显著提升。esProc 提供了一种高效解决方案,能够简化跨库 JOIN 的实现。例如,在车辆管理、交管和公民信息系统中,通过 esProc 可轻松完成如下任务:按城市统计有车公民事件数量、找出近一年获表彰的车主信息,以及按年份和品牌统计车辆违章次数。esProc 支持不同关联场景(如维表关联与主子表关联)的优化算法,如内存索引、游标处理和有序归并,从而大幅提升编码和运算效率。无论是同构还是异构数据源,esProc 均能灵活应对,为复杂数据分析提供强大支持。
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2617 28
|
自然语言处理 数据库 iOS开发
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
1014 12
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具