我們聊一下常用的東西,SQLite,這東西很常用到,當再寫手機APP的時候,有時候會在Client 做 cache或是做一些資料的管理都很必須會用到,我們來看看今天的範例

建立SQL Lite 資料庫,然後建立一張為Users 的資料表其欄位為 ID(數字,並且自動累加)、Name(ntext)、Addr(ntext) ,之後我們寫入一筆資料進去,之後並且將他查詢出來
1.在專案的開始我們首先得先引用幾個library : System.Data , System.Data.SQLite

2.建立資料庫:

var sqlLiteFilePath = GetFileStreamPath("") + "/db_user.db";
//建立Database file @ data/data/
var btnCreateDB = FindViewById<Button>(Resource.Id.btnCreateDB);
btnCreateDB.Click += delegate
{
    SqliteConnection.CreateFile(sqlLiteFilePath);
};

存放的路徑,我之前在Internal Storage章節有提到將會放置在 [PACKAGE NAME]/data/data/files/ 建立成功後你會看到該檔案


這樣代表就寫入成功了,請注意,當這一段重複執行,資料庫會被重置 我因為手機有root 所以我可以直接去該APP 下的資料存放位置觀看.

3.建立資料表 Users:

//建立table
var btnCeateTable = FindViewById<Button>(Resource.Id.btnCeateTable);
btnCeateTable.Click += delegate
{
    try
    {
        var connectionString = String.Format("Data Source={0};Version=3;", sqlLiteFilePath);
        var conn = new SqliteConnection(connectionString);
 
        var cmd =
           new SqliteCommand(
               "CREATE TABLE Users (ID INTEGER PRIMARY KEY AUTOINCREMENT , Name ntext, Addr ntext)", conn)
               {
                   CommandType = CommandType.Text
               };
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
        Toast.MakeText(this, "建立完成", ToastLength.Short).Show();
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, "建立失敗:" + ex.Message, ToastLength.Short).Show();
    }
};

因為不能夠重複建立,所以我偷懶用try catch 起來,當然失敗原因不只包含這種狀況 建立成功後我點入db_user.db 終究會看到Users 那張資料表
並且欄位為:

4.新增資料,這時候我們試試看將資料寫進去 :

//建立資料
var btnInsertData = FindViewById<Button>(Resource.Id.btnInsertData);
btnInsertData.Click += delegate
{
    try
    {
        var connectionString = String.Format("Data Source={0};Version=3;", sqlLiteFilePath);
        var conn = new SqliteConnection(connectionString);
        conn.Open();
        var cmd = new SqliteCommand(conn)
            {
                CommandText = "INSERT INTO Users (\"Name\",\"Addr\") VALUES(\"許當麻\",\"台灣台北\");",
                CommandType = CommandType.Text
            };
        cmd.ExecuteNonQuery();
        conn.Close();
        Toast.MakeText(this, "資料寫入完成", ToastLength.Short).Show();
    }
    catch(Exception ex)
    {
        Toast.MakeText(this, "資料寫入完成:" + ex.Message, ToastLength.Short).Show();
    }
};

看一下資料中的資料:

5.用程式將資料撈取出來呈現:

//查詢
var btnSelect = FindViewById<Button>(Resource.Id.btnSelect);
btnSelect.Click += delegate
{
    try
    {
        //先清除LinearLayout中的所有資料 ,再重新匯入
        var dataContainer = FindViewById<LinearLayout>(Resource.Id.dataContainer);
        dataContainer.RemoveAllViews();
 
        var connectionString = String.Format("Data Source={0};Version=3;", sqlLiteFilePath);
        var conn = new SqliteConnection(connectionString);
        conn.Open();
        var cmd = new SqliteCommand(conn)
        {
            CommandText = "SELECT * FROM Users",
            CommandType = CommandType.Text
        };
        var dr = cmd.ExecuteReader();
 
        while (dr.Read())
        {
            var txtView = new TextView(this);
            txtView.Text = dr["ID"] + "," + dr["Name"] + "," + dr["Addr"];
            dataContainer.AddView(txtView);
        }
        conn.Close();
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, "資料查詢失敗:" + ex.Message, ToastLength.Short).Show();
    }
};


其中,我用一個名為 dataContainer  的LinearLayout 來裝資料.

如果原本對SQLite有操作經驗的人,對你們來說應該很簡單,如果是剛接觸的人,其實這沒有很難可以參考一下,這樣可以很方便解決資料存取的問題
reference : http://docs.xamarin.com/recipes/ios/data/sqlite/create_a_database_with_ado.net

[Xamarin] 關於SQLite 的操作 (转帖)的更多相关文章

  1. [Xamarin] 關於發出Notification 的大小事 (转帖)

    關於Anroid 的使用者來說,Notification 是一個非常會看到且用到的功能 他可以提醒使用者甚麼東西需要待處理,像是郵件或是會議的提醒等.. 甚至有些APP ,直接使用Notificati ...

  2. [Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)

    最近在開發App,會使用到必須要處理一些App所使用的資料,上網路查一下Android 得作法,包含我自己也實作了一下,可能是因為對Java || Android 不是很孰悉,常常錯在 java.la ...

  3. 在laravel下關於blade模板的嘗試

    Blade模板 關於模板繼承和分區段 @section和@yield的實驗 ①關於@section...@show嘗試 測試1 {{--appV2test.blade.php--}} <html ...

  4. Unity3D连接sqlite数据库操作C#版

    unity3d有自己对应的sqlite.dll分别需要三个文件 1.Mono.Data.Sqlite.dll 在unity安装文件“Unity\Editor\Data\MonoBleedingEdge ...

  5. 实验8 SQLite数据库操作

    实验报告 课程名称 实验8  SQLite数据库操作 实验日期 2016.5.6 实验项目名称 多媒体应用开发 实验地点 S30010 实验类型 □验证型    √设计型    □综合型 学  时 一 ...

  6. 我的Android六章:Android中SQLite数据库操作

    今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...

  7. 開博客了, 因為搞Delphi 開發的關於Delphi學習

    開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...

  8. [python]用Python进行SQLite数据库操作

    用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~  ]: u ...

  9. 安卓 SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

随机推荐

  1. Mysql忘记用户密码的解决办法

    1.1 忘记用户密码的解决办法 普通用户,直接用root超级管理员登录进去修改密码就可以了,但是如果root密码丢失了,怎么办呢? 1.1.1 msyqld_saft方式找回密码 停止mysql:se ...

  2. Myeclipse解决dubbo标签不识别问题

    Myeclipse解决dubbo标签不识别问题,引入dubbo.xsd文件,即可:              

  3. 模拟ATM机将输入的数据插入数据库

    ATM抽象类 public abstract class ATM { private double balance; private String idcard; private String pas ...

  4. JQuery mobile 实例 api

    http://www.w3school.com.cn/jquerymobile/jquerymobile_examples.asp

  5. [转]LIBSVM-3.18在python环境下的使用

    http://blog.csdn.net/lj695242104/article/details/39500039 1)安装Python,直接去官方网站 2)运行“cmd”,直接输入python,查看 ...

  6. 开发中用到的开源框架汇总(Updating)

    SuperWebSocket SuperSocket NPOI 官网:http://npoi.codeplex.com/ 实例讲解:http://www.cnblogs.com/yutian/p/52 ...

  7. 使用spring 4.0 + maven 构建超简单的web项目

    一.需求 使用spring去管理web项目,是目前非常流行的一种思路,本文将介绍使用maven+spring 4.0.2 来构建一个简单的web项目. 二.实现 1.新建一个maven项目,如下图所示 ...

  8. DNS劫持和DNS污染的区别

    我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.常用的手段有:DNS劫持和DNS污染. 什么是DNS劫持 DNS劫持就是通过劫 ...

  9. TortoiseSVN汉化包装了,不管用,仍然是英文菜单

    TortoiseSVN装了后,把对应的汉化包也装了,但不管用,仍然是英文菜单. 想着是因为没有重启的原因,但是重启了再装,仍然看不到中文工菜单. 想了一下,TortoiseSVN汉化包在装的时候,没有 ...

  10. HTTP请求响应对照表

    1)请求(客户端->服务端[request]) GET(请求的方式) /books/java.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号) Accept: */*(客户 ...