• [Xamarin] 關於SQLite 的操作 (转帖)


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

    2013-08-16_184708

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

    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/ 建立成功後你會看到該檔案

      shot_000029
    這樣代表就寫入成功了,請注意,當這一段重複執行,資料庫會被重置 我因為手機有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 那張資料表 shot_000031
    並且欄位為:

    shot_000022

    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();
        }
    };

    shot_000027

    看一下資料中的資料:

    shot_000032

    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();
        }
    };

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

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

  • 相关阅读:
    Python pydoc.py
    Python dir
    HTTPS Web配置举例
    Kubernetes 笔记 03 扫清概念
    一文总结 Linux 虚拟网络设备 eth, tap/tun, veth-pair
    一文掌握 Linux 性能分析之内存篇
    云计算底层技术之高性能集群
    利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序
    Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
    [原创] 详解云计算网络底层技术——虚拟网络设备 tap/tun 原理解析
  • 原文地址:https://www.cnblogs.com/whatthehell/p/3444756.html
Copyright © 2020-2023  润新知