Win10开发:SQLite 的使用,win10sqlite
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类