UWPDemo(二)创建一个简单MVVM模式的UWP应用——SQLite在UWP中的使用

前言:

接着前篇文章UWPDemo(一)写啊!
上次我们实现的是采用MVVM模式的UWP应用的创建和实现简单的页面跳转,
今天主要写SQLite数据库在UWP应用中的使用。

SQLite

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

将SQLite引入到项目中

将SQLite引入的方法有很多中,而且SQLite版本也有很多种这里我采用的是:
引入方法:

1.在外部添加SQLite的扩展,就是在官网下载SQLite的扩展包,SQLite官网
将下好的扩展安装好后在项目的引用右击添加引用;
这里写图片描述
2.再在项目中的引用中添加NuGet包,包名SQLite.Net-Pcl;
这里写图片描述
3.最后添加完后在项目的引用中会多俩个文件,如图:
这里写图片描述

在Model层添加建表的代码

这里建立了一个user表,由 id,username,password组成
注意要引入命名空间:

using SQLite.Net.Attributes;

完整代码:

using System;
using SQLite.Net.Attributes;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UWPDemo.Models
{
    //用户表
    [Table("User")]
    public class User
    {
        private int id;
        private string username;
        private string password;
        [PrimaryKey, AutoIncrement][NotNull]
        public int Id
        {
            get => id;
            set => id = value;
        }
        public string Username
        {
            get => username;
            set
            {
                username = value;
            }
        }
        public string Password
        {
            get => password;
            set
            {
                password = value;
            }
        }
    }
}

添加数据库初始化操作,和对应数据库操作

我将数据库的操作放在一个新建的Contorl文件夹中代码文件为DBHelper.cs
如图:上一张图
SQLite为轻量级的数据库连接到数据库的操作不同于MYSQL的用户名和密码的连接,
它是根据数据库在你的电脑中的路径进行连接

SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), dBPath)

初始化数据库的操作为如下代码

        private static string DbFilename;
        private static string dBPath;
        public static string DbFilename1 { get => DbFilename; set => DbFilename = value; }
        public static string DBPath { get => dBPath; }
        public static void SetDBFilename(string Filename)
        {
            if (string.IsNullOrEmpty(Filename) && string.IsNullOrWhiteSpace(Filename))
            {
                throw new ArgumentNullException("操作数据库名称不合法!");
            }
            else
            {
                DbFilename1 = Filename;
                dBPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbFilename1);
            }
        }
        /// <summary>
        /// 初始化数据库
        /// </summary>
        /// <param name="DBFilename">数据库名称</param>
        public static void InitDB(string DBFilename)
        {
            SetDBFilename(DBFilename);
            // ApplicationData.Current.LocalFolder.Path balabala的指的是这个位置 ->C:\Users\xiao22805378\AppData\Local\Packages\92211ab1-5481-4a1a-9111-a3dd87b81b72_8zmgqd0netmce\LocalState\
            if (!File.Exists(dBPath))
            {
                // ApplicationData.Current.LocalFolder.Path balabala的指的是这个位置 ->C:\Users\xiao22805378\AppData\Local\Packages\92211ab1-5481-4a1a-9111-a3dd87b81b72_8zmgqd0netmce\LocalState\
                using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), dBPath))
                {
                    conn.CreateTable<User>();//创建数据表user
                }
            }
        }

数据库初始化在路径
**C:\Users\xiao22805378\AppData\Local\Packages\92211ab1-5481-4a1a-9111a3dd87b81b72_8zmgqd0netmce\LocalState**
生成一个SQLite的数据库里面包含一张user
定义操作数据库的三个操作:

public static int InsertOneUser(User user)//向数据表插入一条数据
        {
            int result = -1;
            using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), dBPath))
            {
                result = conn.Insert(user);
            }
            return result;
        }
        /// <summary>
        /// 返回所有的用户
        /// </summary>
        /// <returns></returns>
        public static List<User> GetAllUser()
        {
            List<User> r;
            using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), dBPath))
            {
                r = conn.Table<User>().ToList<User>();
            }
            return r;
        }
        /// <summary>
        /// 根据记录Username获取用户信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static User GetUserByUsername(string Username)
        {
            User l;
            using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), DBHelper.DBPath))
            {
                try
                {
                    l = conn.Table<User>().Where(v => v.Username == Username).ToList<User>()[0];
                }
                catch
                {
                    l = new User();
                }
            }
            return l;
        }

重点:

初始化操作定义好后我们在什么时候进行数据库的初始化嘞?
我将初始化放在**App.xaml.cs**App初始化的时候一并初始化
既先引用DBHelper.cs的命名空间:

using UWPDemo.Models;

在构造函数中加入:

DBHelper.InitDB("UWPDemo.db");

然后运行后就会生成:
这里写图片描述

最后:

既然数据库建好了,数据库的操作也定义好了,现在就在登陆和注册页面的后台(ViewModel层)对数据库进行简单的操作:

public async Task Register_Click()
        {
            //RegisterPage registerPage = new RegisterPage();

            SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), DBHelper.DBPath);
            if (username.Length < 6)
            {


               await termsOfUseContentDialog.ShowAsync();

            }
            if (Password.Length < 6)
            {
                var dialog = new MessageDialog("密码少于六位!", "提示");
                dialog.Commands.Add(new UICommand("确定", cmd => { }, commandId: 0));
                dialog.Commands.Add(new UICommand("取消", cmd => { }, commandId: 1));
                //设置默认按钮,不设置的话默认的确认按钮是第一个按钮
                dialog.DefaultCommandIndex = 0;
                dialog.CancelCommandIndex = 1;
                await dialog.ShowAsync();
                return;
            }
            if (Password != Confirm)
            {
                var dialog = new MessageDialog("两次密码输入不相同!", "提示");
                dialog.Commands.Add(new UICommand("确定", cmd => { }, commandId: 0));
                dialog.Commands.Add(new UICommand("取消", cmd => { }, commandId: 1));
                //设置默认按钮,不设置的话默认的确认按钮是第一个按钮
                dialog.DefaultCommandIndex = 0;
                dialog.CancelCommandIndex = 1;
                await dialog.ShowAsync();
                return;
            }
            User user = DBHelper.GetUserByUsername(Username);
            if(user.Id != 0)
            {
                var dialog = new MessageDialog("用户已存在!", "提示");
                dialog.Commands.Add(new UICommand("确定", cmd => { }, commandId: 0));
                dialog.Commands.Add(new UICommand("取消", cmd => { }, commandId: 1));
                //设置默认按钮,不设置的话默认的确认按钮是第一个按钮
                dialog.DefaultCommandIndex = 0;
                dialog.CancelCommandIndex = 1;
                await dialog.ShowAsync();
                return;
            }
            else
            {
                User user1 = new User(){
                Username = username,
                Password = password};
                DBHelper.InsertOneUser(user1);
                var dialog = new MessageDialog("注册成功", "提示");
                dialog.Commands.Add(new UICommand("确定", cmd => { }, commandId: 0));
                dialog.Commands.Add(new UICommand("取消", cmd => { }, commandId: 1));
                //设置默认按钮,不设置的话默认的确认按钮是第一个按钮
                dialog.DefaultCommandIndex = 0;
                dialog.CancelCommandIndex = 1;
                var result = await dialog.ShowAsync();
            }
        }

这里代码我写的有点重复,采用dialog的弹窗不太好,等下次再改!

最后后:GitHub地址

这里

猜你喜欢

转载自blog.csdn.net/define_lin/article/details/80468134
UWP