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

Android 转 Windows Phone 8:SQL 数据库的操作

作者头像
凯歌江湖
发布2018-01-05 16:34:23
3.7K0
发布2018-01-05 16:34:23

在接下来的几篇文章中,您将了解如何使用 Windows Phone 8 平台上的本地数据,并将其与

Android 平台上的数据操作进行对比。

有时,键值对 和/或 文件两者不能满足您对数据存储的需求。特别是当您处理重复的结构化数据时,比如一些日程。对于这类信息,您需要使用的是关系存储。所谓的关系存储,通常是一个 SQL 数据库。 Android 和 Windows Phone 8 两个平台均支持使用 SQLite 关系数据库引擎。本文将会假设您已熟悉 Android 上的 SQLite。

安装 SQLite

您需要做的第一件事,是安装适用于 Windows Phone 应用程序的 SQLite,而这通过下载 SQLite for Windows Phone 这个包即可完成。

  1. 在 Visual Studio(译者注:以 VS 2017 简体中文版为翻译标准,下同)中,点击工具菜单,然后选择扩展和更新
  2. 在“扩展和更新”窗口左侧的树形目录中,点击联机,然后选择 Visual Studio 库
  3. 接下来,在右上角的搜索框中输入 sqlite,然后按回车键
  4. 此时应该出现 SQLite for Windows Phone 包,点击下载
  5. 随后会提示您点击安装,只需照做即可。
  6. 相应包被安装后,您需要重启一下 Visual Studio。

Android 提示

SQLite for Windows 包类似于 theandroid.database.sqlite 包。

添加一个引用到 SQLite

目前 SQLite 已被安装,接下来您需要从个人项目中添加一个对它的引用。

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

获取辅助类

最后,您需要做的是获取一些辅助类,这会让使用 SQLite 操作更易用。有不少辅助类可用于 Windows Phone 应用程序,其中我更喜欢使用 sqlite-net 库。

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

Visual Studio 提示

NuGet 是一款免费、开源的 .NET 框架包管理器。

  1. 右击您 Windows Phone 项目中的引用文件夹,然后选择 Manage NuGet Packages...
  2. 展开窗口左侧的 Online 节点。
  3. 在窗口右上角的搜索框中输入 sqlite回车
  4. 选择 sqlite-net 并点击 Install
  5. 两个源文件将被添加到您的项目:SQLite.csSQLiteAsync.cs
  6. 如果您查看错误列表,将会发现一些报错。这是因为 sqlite-net 依赖于尚未移植到 Windows Phone 8csharp-sqlite
  7. 要解决上述问题,您需要使用 sqlite-net-wp8 native C++ 项目,请到对应的 GitHub 项目仓库下载其 zip 压缩包版本。
  8. 右击下载的 zip 文件,点击属性,再点击取消阻止,然后点击确定
  9. 解压 zip 文件。
  10. 在 Visual Studio 的解决方案资源管理器中,右击当前解决方案并选择添加,然后选择现有项
  11. 在“添加现有项”对话框中,选择 Sqlite.vcxproj 文件,然后点击打开
  12. 您现在应该会在您的解决方案中看到 Sqlite 项目。
  13. 您需要将对 Sqlite 项目添加一个到您的 Windows Phone 项目的引用。右击 Windows Phone 项目的引用文件夹,然后点击添加。
  14. 在引用管理器对话框中,从左侧树形目录中选择解决方案,再选择项目
  15. 选中 Sqlite 项目旁边的复选框,然后点击确定
  16. 最后一步是向 Windows Phone 项目添加编译器指令。右击解决方案资源管理器中的 Windows Phone 项目,然后点击属性
  17. 点击生成并将以下内容添加到条件编译符号文本框中:;USE_WP8_NATIVE_SQLITE
  18. F6 键生成解决方案,一切顺利的话之后将会成功生成,并且不会报错。

使用SQLite

最后,我们将介绍如何在 Windows Phone 应用程序中使用 SQLite 执行一些基本任务。

创建表

首先,您需要创建一个应用程序所用表。考虑到接下来的示例,我们会假设您的应用程序正用于将博客文章存储在 SQLite 表中。使用您在上一小节中获取的 sqlite-net 包,您可以轻而易举地编写一个类来定义表。

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

PrimaryKey 属性来自于 sqlite-net 包,它提供的诸多属性允许您定义表的模式。

表被定义后就需要进行创建,您可以这样做:

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

SQLiteAsyncConnection 类的构造函数中的“blog”参数仅指定了 SQLite 数据库的路径。

在对 CreateTableAsync 方法的调用中,指定的 Post 类型指定了应创建的表类型。这个映射会返回之前创建的 Post 类。

Android 提示

在 Android 中,您可创建一个对包含以下方法的 SQLiteOpenHelper 类进行扩展的表:

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

插入一个记录

目前表已经被创建,接下来可以使用以下代码将记录添加到表中:

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

Android 提示

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

代码语言:javascript
复制
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 对象:

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

您可使用以下代码从表格中检索单项记录:

代码语言:javascript
复制
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 中检索单项记录:

代码语言:javascript
复制
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;
}

更新记录

以下代码可用于更新记录:

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

Android 提示

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

代码语言:javascript
复制
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);
}

删除记录

您可以使用以下代码来删除记录:

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

Android 提示

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

代码语言:javascript
复制
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 归档