zoukankan      html  css  js  c++  java
  • 在Windows Phone 8.1中使用Sqlite数据库

    前言                                                                                                                                                                              

    我的工作目前不涉及到Windows phone的开发,但是业余时间也开发过几款app。以前由于各种条件的限制,只接触到WP8.0设备的app开发。

    最近几个月开始将WP8的应用迁移到WP8.1,发现很多API都变了。

    最令我印象深刻也最意外的一点是:【找不到MessageBox】了。

    卧槽,找不到MessageBox...(此处省略100字)

    回归正题,在WP8阶段,微软为本地数据库的操作提供了一系列API,需要的朋友可以通过:http://msdn.microsoft.com/zh-cn/library/hh202860查看。

    不过在WP8.1(XAML)中这些API已经无法使用了,通过搜索一些资料,最终把以前的一些本地数据库操作API替换成Sqlite的版本。

    步骤                                                                                                                                                                              

    1.建立一个WP8.1的项目。

    2.画一个简单的UI,如图:

    app具有一个简单的功能:将“姓名”和“年龄”数据保存到数据库表中。

    app的下半部分是一个列表(现在没有任何数据所以看不出来),用于显示当前数据表中的所有信息。

    3.建立模型

    public class Person
        {
            public int ID
            {
                get;
                set;
            }
    
            public string Name
            {
                get;
                set;
            }
    
            public int Age
            {
                get;
                set;
            }
        }

    4.依次选择VS菜单栏:【工具】--》【扩展和更新】-->【联机搜索Sqllite】,如图:

    下载Sqlite for windows phone8.1,我这里已经下载好了。

    5.下载安装完毕之后需要重启VS。

    6.添加对Sqlite的引用,如图:

    7.接下来编译会发生一个错误,需要将编译架构调整为“ARM”或者“X86”.

    8.添加的sqlite引用是C++开发的,在项目中没有办法直接使用。我们还需要在项目中添加一些别人封装好的类。

    9.打开Nuget管理器,搜索“Sqlite”,安装“Sqlite-net”,如图:

    10.安装完毕后会发现项目中多了两个类,我们操作Sqlite数据库主要也就是使用这两个类中的方法和属性。如图:

    11.接下来可以做点真正有意义的事情了。首先得我们需要告诉Sqlite哪个属性是主键吧?

    我们把“ID”作为主键。

    public class Person
        {
            [PrimaryKey]
            [AutoIncrement]
            public int ID
            {
                get;
                set;
            }
    
            public string Name
            {
                get;
                set;
            }
    
            public int Age
            {
                get;
                set;
            }
        }

    特性"PrimaryKey"表明特性对应的属性作为表的主键。“AutoIncrement”表明这是一个自增列。

    12.创建Person表。

    /// <summary>
            /// 创建Person表
            /// </summary>
            /// <returns></returns>
            private async Task<SQLiteAsyncConnection> CreatePersonTableAsync()
            {
                var conn = new SQLiteAsyncConnection(localDBPath);
                await conn.CreateTableAsync<Person>();
    
                return conn;
            }

    localDBPath是数据库文件的路径。

    我们可以通过返回的“SQLiteAsyncConnection”对象,对Person表进行增删查改的操作。

    13.目前为止,准备工作都做好了。可以书写按钮点击事件的逻辑了。

    private async void AddData_Tapped(object sender, TappedRoutedEventArgs e)
            {
                //构造Person对象
                Person person = new Person();
                person.Name = textboxName.Text;
                person.Age = int.Parse(textboxAge.Text);
    
                //插入到数据库
                var conn = await CreatePersonTableAsync();
                await conn.InsertAsync(person);
            }

    需要注意的是CreateTableAsync方法并不会覆盖掉已有的Table。

    备注                                                                                                                                                                                                                                   

    这篇文章主要帮助一些不知道如何在WP8.1中使用Sqlite的朋友快速上手。

    文章中贴出的代码并没有对一些异常做处理,实际项目中这是不可能的。主要是方便大家看到最精要的部分。

    其他数据库的操作方法我就不一一列举了,查看“SQLiteAsync”类的代码,5分钟就可以知道可以通过SQLiteAsync做哪些事情。

    友情链接:zhoumy博客

  • 相关阅读:
    element-ui的table表格控件表头与内容列不对齐问题
    uniapp 调用手机相机拍照实现图片上传
    配置Git忽略文件
    【转载】Java的几种常见排序算法
    httpclient封装
    idea 启动springboot项目时报错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource
    shell脚本监控网站,异常则进行邮件报警
    nginx配置图片跨域访问
    Nginx基于多端口、多域名配置
    docker部署Nginx项目dockerfile
  • 原文地址:https://www.cnblogs.com/DoNetCoder/p/4155582.html
Copyright © 2011-2022 走看看