前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从 Android 到 Windows Phone 8:使用 SQL 数据库

从 Android 到 Windows Phone 8:使用 SQL 数据库

作者头像
Techeek
发布2018-01-05 16:34:21
2.1K0
发布2018-01-05 16:34:21
举报
文章被收录于专栏:云计算

在接下来的几篇文章中,我将介绍如何使用 Windows Phone 8 平台上的本地数据,并与 Android 平台相比较。

有时光靠普通键值对和/或文件并不能满足项目对数据存储的需求,尤其是当项目中包含大量重复的结构化数据(例如日历应用中的事件)时。对于这种类型的数据,你可能会希望使用一个关系型存储工具来处理。更为具体的说,一个 SQL 数据库。 Android 和 Windows Phone 8 都支持使用 SQLite 关系数据库引擎。本文假定你已经熟悉 Android 上 SQLite 的使用。

安装SQLite

你需要做的第一件事就是安装适用于 Windows Phone 应用的 SQLite。只需要下载用于 Windows Phone 的 SQLite 包即可。

  1. 在 Visual Studio 中,单击“工具”菜单,然后单击“扩展和更新”。
  2. 在“扩展和更新”窗口左侧的目录树中,单击“Online”,然后单击“Visual Studio Gallery”。
  3. 接下来,在右上角的搜索框中输入 sqlite,然后按 Enter 键。
  4. 搜索结果中应该出现“SQLite for Windows Phone”包,点击“下载“。
  5. 随后会提示你是否安装,选择安装。
  6. 包安装完毕后,你需要重新启动 Visual Studio。

ANDROID提示

SQLite for Windows Package 包的作用与 android.database.sqlite 包类似。

添加对 SQLite 的引用

现在 SQLite 已经安装,现在你需要为项目添加对 SQLite 的引用。

  1. 右键单击项目目录中的”引用“文件夹,然后单击”添加引用...“。
  2. 在“引用管理器”窗口左侧的节点树中,展开 Windows Phone-Extensions 节点。
  3. 然后选择”SQLite for Windows Phone“,然后单击确定。
  4. 现在 SQLite 应该会出现在”引用“文件夹下。

使用帮助类

最后,你可能需要包含一些能够简化 SQLite 使用的帮助类。有许多针对 Windows Phone 平台开发的 SQLite 封装库。我个人偏好使用 sqlite-net库。

sqlite-net 库可以通过以下步骤从 NuGet 获得:

Visual Studio 提示

NuGet 是一个免费、开源的包管理器。适用于 .NET Framework 平台。

  1. 右键单击项目中的”引用“文件夹,然后单击 ”管理 NuGet 程序包……“。
  2. 展开窗口左侧的”Online“。
  3. 在窗口右上角的搜索框中输入 sqlite 并按 Enter 键。
  4. 选择 sqlite-net 并单击安装。
  5. 你的项目中将会出现两个源文件:SQLite.cs 和 SQLiteAsync.cs。
  6. 你可能会注意到出现了一些错误。这是因为 sqlite-net 依赖于尚未移植到 Windows Phone 8 平台的 csharp-sqlite 库。
  7. 要解决这个问题,你需要使用 sqlite-net-wp8 native C++ 项目。您首先需要到 GitHub 下载这个库。
  8. 右键单击下载的zip文件,单击“属性”,单击“取消阻止”,然后单击“确定”。
  9. 解压缩内容。
  10. 在 Visual Studio 中的解决方案资源管理器中,右键单击该解决方案并选择"添加",然后选择"现有项目"。
  11. 在“添加现有项目”对话框中,选择 Sqlite.vcxproj 文件,然后单击“打开”。
  12. 随后你的解决方案中会出现 Sqlite 项目。
  13. 现在为你的 Windows Phone 项目添加到 Sqlite 项目的引用。右键单击Windows Phone 项目的”引用“文件夹,然后单击”添加引用……“。
  14. 在”引用管理器“对话框中,从左侧节点树中选择”解决方案“,然后选择”项目“。
  15. 勾选 Sqlite 项目旁边的复选框,然后单击”确定“。
  16. 最后一步是向 Windows Phone 项目添加编译器指令。右键单击解决方案资源管理器中的Windows Phone项目,然后单击”属性“。
  17. 单击”生成“选项卡并将以下内容添加到条件编译符号文本框中:;USE_WP8_NATIVE_SQLITE。
  18. 按F6构建解决方案。现在应该不会有错误并能正常生成。

使用SQLite

在本节的最后部分,我们将了解如何在 Windows Phone 应用程序中使用SQLite 执行一些基本操作。

创建表

首先为你的应用创建一张表。举例来说,假设您的应用程序正在将博客文章存储在 SQLite 表中。通过你在上一节得到的 sqlite-net 包,你可以简单地写一个类来定义一张表。

代码语言:txt
复制
public class Post
{ 
    [PrimaryKey]
    public int Id { get; set; }  
    public string Title { get; set; }  
    public string Text { get; set; } 
}

PrimaryKey 属性来自 sqlite-net 包。该包还提供的许多其他属性来定义表的结构。

表定义完成后,就可以创建它:

代码语言:txt
复制
private async void CreateTable() 
{  
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");  
    await conn.CreateTableAsync<Post>(); 
}

SQLiteAsyncConnection 类的构造函数中的 “blog” 参数指定了 SQLite 数据库的名称。

在对 CreateTableAsync 方法的调用中的 Post 类型指定了应该创建的表的结构,也就是之前定义的 Post 类。

Android 提示

在 Android 中,通过继承 SQLiteOpenHelper 类并实现以下方法,你可以简单的创建一张表。

代码语言:txt
复制
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE Post ( Id INTEGER PRIMARY KEY, Title TEXT, Text TEXT )"); 
}

插入数据

现在我们已经创建了一张表,使用以下代码可以将一条记录添加到表中:

代码语言:txt
复制
public async void InsertPost(Post post) 
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
    await conn.InsertAsync(post); 
}

Android 提示

在 Android 中,您可以使用以下代码插入记录:

代码语言:txt
复制
public void insertPost(SQLiteDatabase db, String title, String text ) {
   ContentValues values = new ContentValues();  
   values.put("Title", title);  
   values.put("Text", text);  
   long newRowId;  
   newRowId = db.insert("Post", null, values); 
}

检索记录

下面我们从表中获取所有记录,如下所示:

代码语言:txt
复制
public async Task<List<Post>> GetPosts() 
{  
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
    var query = conn.Table<Post>();  
    var result = await query.ToListAsync();  
    return result; 
}

Android 提示

在 Android 中,你可以使用以下代码得到一个包含所有记录的 Cursor 对象:

代码语言:txt
复制
public Cursor getPosts(SQLiteDatabase db){
  String[] projection = {"Id", "Title", "Text" };
  Cursor c = db.query("Post", projection, null, null, null, null, null);  
  return c; 
}

如果要根据 id 查找某条记录:

代码语言:txt
复制
public async Task<Post> GetPost(int id) 
{   
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");  
    var query = conn.Table<Post>().Where(x => x.Id == id);  
    var result = await query.ToListAsync();  
    return result.FirstOrDefault(); 
}

Android 提示

使用以下代码来在 Android 中通过 id 查找记录:

代码语言:txt
复制
public Cursor getPost(SQLiteDatabase db, Integer id){  
  String[] projection = {"Id", "Title", "Text" };  
  String selection = "Id LIKE ?";  
  String[] selelectionArgs = { String.valueOf(id) };  
  Cursor c = db.query( "Post", projection, selection, selectionArgs, null, null, null);  
  return c; 
}

更新记录

更新某条记录可以用下面的方法:

代码语言:txt
复制
public async void UpdatePost(Post post) 
{  
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");  
    await conn.UpdateAsync(post); 
}

Android 提示

在 Android 中,你可以使用以下代码更新记录:

代码语言:txt
复制
public void updatePost(SQLiteDatabase db, Integer id, String title, String text ) {
  ContentValues values = new ContentValues();  
  values.put("Title", title);  
  values.put("Text", text);  
  String selection = "Id LIKE ?";  
  String[] selelectionArgs = { String.valueOf(id) };  
  int count = db.update("Post, values, selection, selectionArgs); 
}

删除记录

删除特定的记录:

代码语言:txt
复制
public async void DeletePost(Post post) {
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");  
    await conn.DeleteAsync(post); 
}

Android 提示

在 Android 中,你可以使用以下代码来删除记录:

代码语言:txt
复制
public void deletePost(SQLiteDatabase db, Integer id ) {
  String selection = "Id LIKE ?";  
  String[] selelectionArgs = { String.valueOf(id) };  
  db.delete("Post", selection, selectionArgs); 
}
评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装SQLite
  • 添加对 SQLite 的引用
  • 使用帮助类
  • 使用SQLite
    • 创建表
      • 插入数据
        • 检索记录
          • 更新记录
            • 删除记录
            相关产品与服务
            数据保险箱
            数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档