功能简介
利用SQLite数据库实现数据的持久化,以及对数据项的增、删、改、查,使用SQLite Expert查看数据库内容;博客示例项目包括一个MainPage,MainPage左边有一个ListView,用于显示数据库里的所有数据;右边包括一个搜索界面和修改界面,可以用于对数据库里的内容进行搜索和更新/添加新的数据项;
博客示例项目涉及到一些其他的内容,请确保你对下面内容有所了解再使用(可以参考链接的博客):
实现效果
- 主界面
- 数据库保存在LocalFolder中
- 使用SQLite Expert查看数据库的内容
- 对数据库内容进行更新
- 对数据库内容进行搜索
实现过程
环境配置
- 将SQLite包含到应用包内:工具—>拓展和更新—>联机—>搜索SQLitefor Univeral Windows Platform—>安装
- 右击项目 “引用” >> 选择 “添加引用” >> 在弹出的窗口左侧栏选择 “Universal Windows” “扩展” >>选择“SQLite for Universal Windows Platform后确定
- 在引用右键管理NuGet程序包搜索SQLitePCL并安装
- 最终效果
新建类DBService
DBService类是我们用于数据库管理的类,所有对数据库的操作都要通过DBService来进行
//DBService.cs
namespace SQLiteSample
{
class DBService
{
public DBService()
{
//建立连接,如果MySQLite.db不存在,则会新建MySQLite.db
conn = new SQLiteConnection("MySQLite.db");
//获取表,如果Items表不存在,则新建表Items
string sql = @"CREATE TABLE IF NOT EXISTS
ITEMS(
ID INTEGER PRIMARY KEY NOT NULL,
TITLE VARCHAR(50),
DETAIL VARCHAR(200)
);";
using (var statement = conn.Prepare(sql))
{
statement.Step();
}
}
private SQLiteConnection conn;
//一些需要的SQL语句
private String SQL_DELETE = "DELETE FROM ITEMS" + " WHERE ID = ?";
private String SQL_UPDATE = "UPDATE ITEMS" + " SET TITLE = ? , DETAIL = ? WHERE ID = ?";
private String SQL_INSERT = "INSERT INTO ITEMS (TITLE,DETAIL)" + " VALUES(?,?);";
private String SQL_SELECT_ALL = "SELECT * FROM ITEMS";
private String SQL_QUERY = "SELECT * FROM ITEMS WHERE TITLE LIKE (?) OR DETAIL LIKE (?);";
private String SQL_GETID = "SELECT ID FROM ITEMS WHERE TITLE = (?) OR DETAIL = (?);";
//初始化,获得本地数据库中的所有Item
internal void Initialize(ObservableCollection<Item> allItems)
{
//使用SQL_SELECT_ALL语句获得所有的内容
using (var statement = conn.Prepare(SQL_SELECT_ALL))
{
//statement.Step()将依次获得每一行的结果
while (SQLiteResult.ROW == statement.Step())
{
int id = int.Parse(statement[0].ToString());
string title = (string)statement[1];
string detail = (string)statement[2];
allItems.Add(new Item(id, title, detail));
}
}
}
//增
internal int CreateItem(Item item)
{
//往数据库中添加数据
using (var statement = conn.Prepare(SQL_INSERT))
{
//这里的Bind会依次替换掉上面语句中的问号
statement.Bind(1, item.Title);
statement.Bind(2, item.Detail);
statement.Step();
}
/*
* 用于得到之前添加的数据的Id,其实这里的操作不太规范,因为通过title和detail可能相同
* 不过这里只是为了演示如何使用数据库,就不要太在意这个了,(乛◡乛)
*/
using (var statement = conn.Prepare(SQL_GETID))
{
statement.Bind(1, item.Title);
statement.Bind(2, item.Detail);
if (SQLiteResult.ROW == statement.Step())
{
return int.Parse(statement[0].ToString());
}
}
return 0;
}
//更新
internal void UpdateItem(Item item)
{
using (var statement = conn.Prepare(SQL_UPDATE))
{
statement.Bind(1, item.Title);
statement.Bind(2, item.Detail);
statement.Bind(3, item.Id);
statement.Step();
}
}
//查
internal async void queryItem(string text)
{
//StringBuilder与string的差别是一个可变字符串,在使用上和String差不多
StringBuilder strB = new StringBuilder();
using (var statement = conn.Prepare(SQL_QUERY))
{
string key = "%" + text + "%";
statement.Bind(1, key);
statement.Bind(2, key);
while (SQLiteResult.ROW == statement.Step())
{
strB.Append("Title: ");
strB.Append(statement[1].ToString());
strB.Append(" Detail: ");
strB.Append(statement[2].ToString());
strB.Append("\n");
}
}
MessageDialog searchDialog = new Windows.UI.Popups.MessageDialog(strB.ToString());
await searchDialog.ShowAsync();
}
//删
internal void DeleteItem(int id)
{
using (var statement = conn.Prepare(SQL_DELETE))
{
statement.Bind(1, id);
statement.Step();
}
}
}
}
需要注意的地方:
- 在构造函数中连接数据库
- 预先声明的SQL语句
- statement.Bind()将对SQL里的值进行添值
- statement.Step()在在数据库中执行该语句
新建Item类
- 这个类的内容没什么重要的,Item中有三个属性,一个title,一个detail,一个id,对应数据库中一行中的数据;Item类只是为了示例需要,由于篇幅关系,这部分省略,具体代码可以下载下面的示例项目
在MainPage.xaml中添加控件
- 由于篇幅关系,这部分省略,具体代码可以下载下面的示例项目
在MainPage.xaml.cs的构造函数上添加代码
首先,我们需要添加一个DBServie对象
private DBService itemDBService = new DBService();
然后针对需要只用对应的函数
//列表项初始化
itemDBService.Initialize(allItems);
//增
itemDBService.CreateItem(rightItem);
//删:item.Id为Primary Key
itemDBService.DeleteItem(item.Id);
//查:Query为MainPage的一个文本框,Query.Text得到查询的输入内容
itemDBService.queryItem(Query.Text);
//改
itemDBService.UpdateItem(rightItem);
- 由于篇幅关系,这部分省略,具体代码可以下载下面的示例项目
总结
整个项目最重要的就是第一步环境配置和第二步DBService类代码的编写,其它的地方就可以通过调用DBService的函数连接数据库啦;
FYI
项目下载:SQLiteSample
运行前首先需要按上面实现过程的第一步配置环境!!!
项目下载之后记住把Debug模式从ARM换成X86或X64(根据你自己的机型选择),之前一开始学习的时候不知道这一点,从网上下载下来的项目都运行不了,纠结的一逼(╥╯^╰╥)