Win10开发:SQLite 的使用

来源:互联网 发布:淘宝网登录密码加密 编辑:程序博客网 时间:2024/05/21 06:57

SQLite是一款轻型的数据库,网上关于SQLite的介绍太多,我就不专门废话介绍了。

SQLite的作用一言以蔽之,就是如果你做移动应用,需要用的数据库,那就推荐用SQLite。

而关于SQLite的使用,网上也有许多博客和教程,比如http://www.cnblogs.com/h82258652/p/4802076.html和http://www.cnblogs.com/yanxiaodi/p/4941312.html

本篇文章同样讲解Win10下的SQLite的使用,与上面两篇博文有相似的地方也有不同的地方,可以结合的看,当然你要是大神就不用看了

工欲善其事,必先利其器,所以第一步我们要

一、安装SQLite扩展包

安装方式有两种

方法a:

打开VS->菜单->工具->扩张和更新->联机搜索“SQLite”->找到“SQLite for Universal App Platform”扩展包下载并安装,安装成功后重启VS


方法b:

打开SQLite的官方下载页面:http://sqlite.org/download.html 找到下图中的下载并安装



二、添加SQLite引用

右键工程项目下的引用,选择“添加引用”。然后在扩展中勾选“SQLite for Universal App Platform”,点击确定


三、添加 SQLite.Net 的引用

右键工程名,选择“管理Nuget程序包”,搜索“SQLite.Net”,找到SQLite.Net-PCL后选择安装。因为SQLite的版本非常多,而且有点乱,小心不要找错了。

你也可以选择SQLite.Net.Async-PCL安装包,从名字就可以看出这是异步的版本,如果熟悉或擅长异步编程的读者也可以选择安装这个版本。


四、找一个合适的工具用来查看SQLite数据库

我知道的有两个,SQLite Expert和SQLiteStudio,我用的是前者。

SQLite Expert的下载主页:http://sqliteexpert.com/download.html,选择免费的Personal版本下载安装即可


以上,我们的中部工作算是完成了。

五、新增实体类Student
public class Student    {        [PrimaryKey,AutoIncrement]        public int Id { get; set; }        [MaxLength(5)]        public string Name { get; set; }    }

稍微对数据库有点接触的可以看出,Id是主键、自增长字段;Name的最大长度是5
文章(http://www.cnblogs.com/aseman/articles/330082.html)中讲到,其实这里设置MaxLength并没有什么卵用,可以直接去掉。因为:
所以如果要限制属性的长度等,只能在插入数据库之前做判断了。

六、编写静态DbHelper类
1、首先定义一个只读的私有字段DbPath,指定数据库的存储路径
private readonly static string DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "test.db");
调试查看这个变量的值为:%USERPROFILE%\AppData\Local\Packages\5bdfd734-2172-41fe-941d-794b82811336_pq9gj32favbr2\LocalState\test.db
其中%USERPROFILE%代表的是系统的当前用户文件夹,Packages后面一坨是由项目的程序包名加上一堆我不知道的鬼东西构成

包名可以通过项目的 Package.appxmanifest 文件下的“打包”标签下查看

所以,如果你要用SQLite Expert打开test.db文件,在文件资源管理器中直接键入“%USERPROFILE%\AppData\Local\Packages\”然后找到包名开头的文件夹,进入该文件夹下的“LocalState”文件夹就可以找到test.db文件

2、连接数据库
public static SQLiteConnection GetDbConnection()        {            // 连接数据库,如果数据库文件不存在则创建一个空数据库            return new SQLiteConnection(new SQLitePlatformWinRT(), DbPath);        }


3、创建表格

public static void CreatStudentTable()        {            var conn = GetDbConnection();            // 创建 模型对应的表,如果已存在,则忽略该操作            conn.CreateTable<Student>();        }
当前我还没找到一个合适的方法,让这个方法可以创建不同的表格,因为这里的“Student”是写死的,想用反射的办法,但是功夫没学到家,所以还没有办法解决。如果有读者知道方法还请告知~~

这样做带来一个很不友好的操作,如果需要创建Person表,就要另写一函数

public static void CreatPersonTable()        {            var conn = GetDbConnection();            // 创建 模型对应的表,如果已存在,则忽略该操作            conn.CreateTable<Person>();        }

4、插入数据

a. 插入一个数据

public static int Insert<T>(T obj)        {            int count;            using (var conn = GetDbConnection())            {                count=conn.Insert(obj);            }            return count;        }
b. 插入一个List列表

public static int Insert<T>(List<T> objList)        {            int count=0;            using (var conn = GetDbConnection())            {                foreach (var item in objList)                {                    count+=conn.Insert(item);                }            }            return count;        }
都是很简单的代码,Insert方法会自动判断你的输入参数类型将数据插入对应的表格,当然首先数据库中要有相对应的表格存在。这里未做异常捕获

方法二的测试代码:

var list=Enumerable.Range(0, 10).Select(i=> new Student() { Name = i.ToString() }).ToList();DbHelper.Insert(list);

5、删除数据

a.删除单个数据

 public static void Delete<T>(T obj)        {            using (var conn = GetDbConnection())            {                conn.Delete(obj);            }        }

b.删除全部数据

public static void DeleteAll(Type type)        {            using (var conn = GetDbConnection())            {                conn.DeleteAll(type);            }        }
测试代码:

DbHelper.DeleteAll(typeof(Student));

c.根据Sql语句删除

public static void Delete<T>(string query) where T : class        {            using (var conn = GetDbConnection())            {                var list=conn.Query<T>(query);                foreach (var item in list)                {                    conn.Delete(item);                }            }        }
测试代码:

<pre name="code" class="csharp">DbHelper.Delete<Student>("select * from student where id < 24");

这里用到了查询方法,因此

6、查询数据

 public static List<T> Find<T>(string query) where T : class        {            using (var conn = GetDbConnection())            {                return conn.Query<T>(query);            }        }

测试代码:

DbHelper.Find<Student>("select * from student where id < 24");
还有一种做法是直接用Linq

var conn=DbHelper.GetDbConnection();var list=conn.Table<Student>().Where(x=>x.Id<30);


7、更新数据

 public static int Update<T>(T obj) {            using (var conn = GetDbConnection())            {                return conn.Update(obj);            }}

七、查看数据库

打开安装好的SQLite Expert,菜单中File->Open Database,然后根据步骤六开头讲的路径找到test.db文件。左边就是数据库名和表名,主界面主要的关心的是SQL、Data和Design,它们的作用分别是

SQL标签下可以输入sql语句进行数据库的操作

Data标签下就是具体的表格数据

Design标签就是数据库的定义,对应项目工程中的实体类,这里就是Student类




0 0
原创粉丝点击