UWP SQLite的使用

原文:UWP SQLite的使用

1.准备工作

  1.首先我们要给项目添加“SQLite for Universal Windows Platform”扩展

    点击菜单栏的“工具”-“扩展和更新”,然后在“联机”中搜索

  2.安装扩展后我们再添加“SQLite.Net-PCL ”的Nuget程序包

    在解决方案管理器中右击项目的“引用”,打开“管理Nuget程序包管理”,在“浏览”中搜索并安装

    现在已经准备完成了,可以开始使用了。

2.使用

    先定义一个数据模板,接下来会用到(这里需要"using SQLite.Net.Attributes;")

public class DataTemple
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }     //主键

    public string Name { get; set; }
    public string Age { get; set; }
}

  1.建立数据库

string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "mydb.sqlite");
SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), path);

  2.建表

conn.CreateTable<DataTemple>(); //默认表名同范型参数
//以下等效上面
//conn.CreateTable(typeof(DataTemple));

  3.增

    增一条:

conn.Insert(new DataTemple(){   Name = textBox.Text, Age = textBox1.Text });

    增一堆:

List<DataTemple> dataTemples=new List<DataTemple>();
dataTemples.Add(……);
//添加若干项……
conn.InsertAll(dataTemples);

  4.删

    删一条:

conn.Execute("delete from DataTemple where Name = ?", name);

    全删:

conn.DeleteAll<DataTemple>();

  5.查

    按条件查询(name是string变量):

    方法1:

List<DataTemple> query = conn.Table<DataTemple>().Where(v => v.Name == name).ToList();  

    方法2:

List<DataTemple> query = conn.Query<DataTemple>("select * from DataTemple where Name = ?", name);

    查询全部:

    方法1:

List<DataTemple> query = conn.Table<DataTemple>().ToList();

    方法2:

List<DataTemple> query = conn.Query<DataTemple>("select * from DataTemple");

3.Demo

  界面:

<Page
    x:Class="Sqlite.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Sqlite"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button x:Name = "Add" Content = "添加" Width="80" Margin="0,10,0,0"
                    Click = "Add_Click" HorizontalAlignment="Center"/>
            <Button Name="Select" Content="按名查询" Width="80" Margin="0,10,0,0"
                    Click = "Select_Click" HorizontalAlignment="Center"/>
            <Button x:Name = "Retrieve" Content = "查询全部"  Width="80" Margin="0,10,0,0"
                    Click = "Retrieve_Click" HorizontalAlignment="Center"/>
            <Button Name="Del" Content="按名删除" Width="80" Margin="0,10,0,0"
                    Click = "Del_Click" HorizontalAlignment="Center"/>
            <Button Name="DelAll" Content="全删" Width="80" Margin="0,10,0,0"
                    Click = "DelAll_Click" HorizontalAlignment="Center"/>
            <TextBlock x:Name = "textBlock" TextWrapping = "Wrap" 
                       Text = "Name" Width = "100"/>
            <TextBox x:Name = "textBox" TextWrapping = "Wrap" Width = "100"/>
            <TextBlock x:Name = "textBlock1" TextWrapping = "Wrap" 
                       Text = "Age" Width = "100"/>
            <TextBox x:Name = "textBox1" TextWrapping = "Wrap" Width = "100"/>
            <TextBlock x:Name = "textBlock2" TextWrapping = "Wrap" 
                       Width = "324" Margin="10"/>
        </StackPanel>
        
    </Grid>
</Page>

  逻辑:

using System.Collections.Generic;
using System.IO;
using System.Linq;
using SQLite.Net;
using SQLite.Net.Platform.WinRT;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;  

//“空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 上有介绍  

namespace Sqlite
{
    /// <summary>
    /// 可用于自身或导航至 Frame 内部的空白页。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "mydb.sqlite");    //建立数据库
        SQLiteConnection conn;  

        public MainPage()
        {
            this.InitializeComponent();
            //建立数据库连接
            conn = new SQLiteConnection(new SQLitePlatformWinRT(), path);
            //建表
            conn.CreateTable<DataTemple>(); //默认表名同范型参数
            //以下等效上面的建表
            //conn.CreateTable(typeof(DataTemple));
        }  

        //查询所有
        private void Retrieve_Click(object sender, RoutedEventArgs e)
        {
            textBlock2.Text = "";
            List<DataTemple> datalist = conn.Query<DataTemple>("select * from DataTemple");  

            /////////下面跟上面等效////////////////
            //List<DataTemple> datalist = conn.Table<DataTemple>().ToList();  

            foreach (var item in datalist)
            {
                textBlock2.Text += item.Id + " " + item.Name + " " + item.Age + "\n";
            }
        }  

        //添加一个记录
        private void Add_Click(object sender, RoutedEventArgs e)
        {
            conn.Insert(new DataTemple() { Name = textBox.Text, Age = textBox1.Text });
        }  

        //删除一项
        private void Del_Click(object sender, RoutedEventArgs e)
        {
            conn.Execute("delete from DataTemple where Name = ?", textBox.Text);
        }  

        //查询
        private void Select_Click(object sender, RoutedEventArgs e)
        {
            textBlock2.Text = "";
            List<DataTemple> datalist = conn.Query<DataTemple>("select * from DataTemple where Name = ?", textBox.Text);  

            //////////////下面的也是查询////////////////////
            //List<DataTemple> datalist = conn.Table<DataTemple>().Where(v => v.Name==name).ToList();  

            foreach (var item in datalist)
            {
                textBlock2.Text += item.Id + " " + item.Name + " " + item.Age + "\n";
            }
        }  

        //删除全部记录
        private void DelAll_Click(object sender, RoutedEventArgs e)
        {
            conn.DeleteAll<DataTemple>();
        }
    }
}

  界面:

  参考资料:Windows 10 Development - SQLite Database

                    https://github.com/oysteinkrog/SQLite.Net-PCL     (在test分支里面有示例代码)

时间: 2024-12-22 15:51:05

UWP SQLite的使用的相关文章

Win10通用应用程序 UWP 使用 SQLite 【图文教程】

在win10 UWP开发中,我们可以使用SQLite.本篇文章说一下如何在UWP中使用SQLite.因为SQLite是跨平台的,版本众多,我刚开始用的时候不知道要装哪个,什么WP8的.WP8.1的.Win RT的--简直摸不着头脑.希望这篇文章能让大家少走点弯路. 一.添加SQLite扩展 首先要添加SQLite的库.主页是http://sqlite.org/,下载地址在:http://sqlite.org/download.html.这个页面有所有平台的下载地址,下载这个: 然后安装. 还有一

Win10 UWP 开发系列:使用SQLite

原文:Win10 UWP 开发系列:使用SQLite 在App开发过程中,肯定需要有一些数据要存储在本地,简单的配置可以序列化后存成文件,比如LocalSettings的方式,或保存在独立存储中.但如果数据多的话,还是需要本地数据库的支持.在UWP开发中,可以使用SQLite.本篇文章说一下如何在UWP中使用SQLite.因为SQLite是跨平台的,版本众多,我刚开始用的时候不知道要装哪个,什么WP8的.WP8.1的.Win RT的--简直摸不着头脑.希望这篇文章能让大家少走点弯路. 其实这篇文

UWP开发-在UWP中使用sqlite

原文:UWP开发-在UWP中使用sqlite sqlite是一种轻量级的数据库,对于一些资源紧张又需要数据库的开发非常好用. SQLite 是一个开源的无服务器嵌入式数据库. 这些年来,它已作为面向存储在许多平台和设备上的数据的主要设备端技术出现. 通用 Windows 平台 (UWP) 支持并建议使用 SQLite 实现跨所有 Windows 10 设备系列的本地存储. SQLite 最适用于手机应用.面向 Windows 10 IoT 核心版(IoT 核心版)的嵌入式应用程序,以及作为企业关

UWP开发随笔——使用SQLite数据库

原文:UWP开发随笔--使用SQLite数据库 摘要 大多数的app都需要数据存储,在数据存储这方面,强大的windows把app数据分为两种:settings和files,并提供了十分简洁的api,让开发者能够轻松使用.但是在有些场景下,app的数据存储需要有database的支持,而sqlite,由于它轻量.高效.跨平台的特性,已经成为移动客户端开发中不可或缺的一部分.今天,小编就简单介绍一下如何在uwp开发中使用sqlite数据库. 环境配置 1.下载和安装SQLite 要使用sqlite

uwp - 解决使用EntityFramework时报错“unable to load dll &amp;#39;sqlite3&amp;#39;:the specified module could not be found”

原文:uwp - 解决使用EntityFramework时报错"unable to load dll 'sqlite3':the specified module could not be found" 在使用uwp的ef过程中碰到一万个问题快折腾死我了,好在最后终于解决掉所有问题,但愿如此,因为在这之前先后发生不同的报错,不知道后面还会碰到新的问题不. 其中一个问题是这样的,生成能正常生成,但是启动程序后在运行到:"db.Database.Migrate();"

Win10之UWP的数据存储

原文:Win10之UWP的数据存储 我们知道通常我们开发的时候都要考虑把用户的数据存储到一个数据库里面,而这个数据库则考虑到了整个应用的性能上面,这里我们不考虑SQL server的数据库,我们考虑较为轻量的数据库进行存储. 首先我们新建一个项目,然后把界面用代码处理一下 <Grid.RowDefinitions> <RowDefinition Height="100"/> <RowDefinition Height="Auto"/&g

Win10 UWP系列:更新UWP时注意的问题——TargetDeviceFamily

原文:Win10 UWP系列:更新UWP时注意的问题--TargetDeviceFamily 前几天把CurrencyExchanger提交到微软参加Master认证,结果没有通过,反馈了一些错误,看来微软检查还是比较仔细的. 错误主要有: Visual feedback helps users recognize whether their interactions with your application are detected, interpreted, and handled as

ios-IOS的SQLite查询数据,如果没有对应数据的话,应该怎么获取到这个信息

问题描述 IOS的SQLite查询数据,如果没有对应数据的话,应该怎么获取到这个信息 RT,求解. 我是用本地的数据库,数据都是已经固定了的,根据编号显示数据,如果数据中没有编号,我想设置弹出一个提示,但是我不知道怎么获取查不到数据的这个信息 解决方案 select count(*) from table where 条件 返回0表示没有数据

解决sqlite死锁示例异常database is locked

/* * sqlite的连接方式实际上为单连接方式,即使实用多线程也是用的一个连接 * getWritableDatabase()和getReadableDatabase()都为synchronized方法,但不是static方法 * 所以都只对同一个对象起同步作用,对于不同的对象没有任何作用 * 所以使用sqlite的时候可以提供一个单一的入口,防止多对象修改数据库而造成死锁 * 所以可以提供一个static的instance对象+它的get方法, * 连接可一直挂着,即使多次调用getWri