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

  • 相关阅读:
    Spring AOP
    Spring Bean的生命周期
    MySQL中的SQL的常见优化策略
    垃圾收集器
    JWT
    Zookeeper
    RabbitMQ原理介绍
    kafka 安装配置
    kafka 简介
    ELK logstash 各种报错
  • 原文地址:https://www.cnblogs.com/linzheng/p/2000317.html
Copyright © 2020-2023  润新知