【Win10】在應用中使用 SQLite 資料庫

來源:互聯網
上載者:User

標籤:

在絕大多數應用中,免不了要做的一項就是設定這樣的本機資料儲存。簡單的資料存放區我們可以使用 LocalSettings 或者 IsolatedStorageFile(隔離儲存區 (Isolated Storage))等等的方式來進行本機資料儲存。但是,如果資料比較複雜,或者是存在關聯關係的情況下,這種簡單的KVStore for Redis方式是不夠用的。這時候就需要用到資料庫來進行儲存。說到資料庫,小型、輕量基於檔案的 SQLite 就很適合在這種場合使用。

一、安裝 SQLite for Universal App Platform VSIX 擴充

開啟功能表列的工具-擴充與更新,選擇左側的聯機選項卡,在右上方搜尋方塊輸入 SQLite。

安裝上面這個 SQLite for Universal App Platform 擴充。等待安裝完成後,重新啟動 Visual Studio。

二、在項目中添加引用1、添加對 SQLite 的引用

建立一個項目(當然在現有項目添加也可以,這裡只是示範)。等待建立完成後,添加引用。

按照圖片中的步驟,找到 SQLite for Universal App Platform,並勾選,然後按右下角的確定按鈕。

2、添加 SQLite.Net 的引用

或者可以直接在封裝管理員控制台鍵入:Install-Package SQLite.Net-PCL 來進行安裝。

3、確保引用無誤

確保項目是把這兩個包都引用上

三、開始編碼1、編寫用於測試的 Person 模型類
public class Person{    [PrimaryKey]// 主鍵。    [AutoIncrement]// 自動成長。    public int Id    {        get;        set;    }            [MaxLength(5)]// 對應到資料庫 varchar 的大小。    public string Name    {        get;        set;    }}

需要注意的是,MaxLengthAttribute 所在的命名空間是 SQLite.Net.Attributes,而不是 .Net 架構裡的 System.ComponentModel.DataAnnotations。

2、編寫測試頁面的前台 Xaml 代碼
<Page x:Class="SqliteDemo.MainPage"      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">        <StackPanel Margin="100">            <TextBlock Text="添加"></TextBlock>            <TextBox Header="名字"                     x:Name="txtAddName"></TextBox>            <Button Content="添加進資料庫"                    Click="BtnAdd_Click"></Button>            <TextBlock Text="查詢"                       Margin="0,50,0,0"></TextBlock>            <Button Content="查詢所有"                    Click="BtnGetAll_Click"></Button>        </StackPanel>    </Grid></Page>
3、編寫測試頁面的後台 cs 代碼
public sealed partial class MainPage : Page{    public MainPage()    {        this.InitializeComponent();    }    private async void BtnAdd_Click(object sender, RoutedEventArgs e)    {        string name = txtAddName.Text;        using (var conn = AppDatabase.GetDbConnection())        {            // 需要添加的 Person 對象。            var addPerson = new Person() { Name = name };            // 受影響行數。            var count = conn.Insert(addPerson);            string msg = $"新增的 Person 對象的 Id 為 {addPerson.Id},Name 為 {addPerson.Name}";            await new MessageDialog(msg).ShowAsync();        }    }    private async void BtnGetAll_Click(object sender, RoutedEventArgs e)    {        using (var conn = AppDatabase.GetDbConnection())        {            StringBuilder msg = new StringBuilder();            var dbPerson = conn.Table<Person>();            msg.AppendLine($"資料庫中總共 {dbPerson.Count()} 個 Person 對象。");            foreach (var person in dbPerson)            {                msg.AppendLine($"Id:{person.Id};Name:{person.Name}");            }            await new MessageDialog(msg.ToString()).ShowAsync();        }    }}
4、編寫 AppDatabase 類
public static class AppDatabase{    /// <summary>    /// 資料庫檔案所在路徑,這裡使用 LocalFolder,資料庫檔案名叫 test.db。    /// </summary>    public readonly static string DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "test.db");    public static SQLiteConnection GetDbConnection()    {        // 串連資料庫,如果資料庫檔案不存在則建立一個空資料庫。        var conn = new SQLiteConnection(new SQLitePlatformWinRT(), DbPath);        // 建立 Person 模型對應的表,如果已存在,則忽略該操作。        conn.CreateTable<Person>();        return conn;    }}
四、運行

注意:必須將項目的編譯改為 x86 或者 x64,不能是 Any。

程式運行起來後,我們先添加幾個資料:

添加完這 4 個資料之後,我們點擊查詢按鈕。

好像沒什麼問題。慢著,我們的 Person 模型不是在 Name 屬性上標註了 MaxLength 為 5 的嗎?為什麼阿曆山大大帝還在?!(阿力山大大帝:我怎麼躺槍了)

查閱園子裡的資料得知:

新知識點 GET!(這問題之前一直沒怎麼留意過……)

所以要判斷的話,只能在插入資料前判斷了。

五、查看儲存的資料庫

首先先開啟項目的 Package.appxmanifest 檔案,然後選擇打包選項卡。

將包名這串字串複製下來。

開啟檔案瀏覽器,路徑輸入 %USERPROFILE%\AppData\Local\Packages\

然後在右上方搜尋剛剛複製的包名。

開啟這個檔案夾。

然後開啟 LocalState 這個檔案夾,裡面可以發現一個 test.db 的檔案,這就是我們的資料庫了。

然後我們把它複製出來,並用 SQLite 資料庫軟體開啟它,這裡我使用的是 SQLiteStudio,百毒一下就有它的官方網站了。

按上面的步驟的話,就能夠看到我們定義的 Person 類所對應的表結構了。

而且也能看見我們剛剛插入的資料。

六、結語1、為啥寫這篇 blog ?

今天看見 MS-UAP 寫了篇也是關於使用 SQLite 的 blog,才想起之前就一直也想寫一篇關於 WinRT 下如何使用 SQLite 的 blog。純粹填坑,部分內容與 MS-UAP 寫的重複,本文可作為補充。

2、本文適用人群

①、對 SQLite 有使用需求的人群,不一定是 UWP 的開發人員,因為這個 SQLite.Net 的庫是 PCL 的,可以在其它平台(例如 Winform)也能使用,在 SQLiteConnection 的建構函式傳遞相應平台的參數即可。

②、ORM 愛好者、討厭 sql 人群。像我這種 sql 不怎麼樣的就只能抱 ORM 的大腿了。所以如果是 sql 愛好者,請去看 MS-UAP 寫的那篇,那篇使用的 SQLite 庫是類似 C 的風格,使用傳統的 sql 語句。

【Win10】在應用中使用 SQLite 資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.