[UWP小白日记-2]SQLite数据库DOME
数据库说简单点就是增删改查,但是对新手来说也是要爆肝的。作为一个新手爆肝无数次啊,
血的教训啊现在UWP的教程又少,说多了都是泪。留下来免得以后又爆肝。还有:一定要写注释!一定要写注释!一定要写注释! 重要的事情说三遍!
1.首先,准备工作:
1)引用:

获取途径:VS里的扩展和更新、NuGet等。
2)数据库模型:
internal class ACCOURT
{
public ACCOURT() { } //空构造函数
public ACCOURT(int ID,double Amount,string Descr,DateTime Time,string Mark,string Company)
{//重载构造函数,用来后面把UI上的数据传入数据库
this.UID = ID;
this.Amount = Amount;
this.Descr = Descr;
this.Time = Time;
this.Mark = Mark;
this.Company = Company;
}
/// <summary>
/// 编号
/// </summary>
[PrimaryKey] //主键
[AutoIncrement]//自增
[NotNull]//不能为空
public int UID { get; set; } /// <summary>
/// 金额
/// </summary>
public double Amount { get; set; } /// <summary>
/// 备注
/// </summary>
public string Descr { get; set; } /// <summary>
/// 时间
/// </summary>
public DateTime Time { get; set; } /// <summary>
/// 标签
/// </summary>
public string Mark { get; set; } /// <summary>
/// 所属公司
/// </summary>
public string Company { get; set; }
}
3.写帮助类:
0)引入SQLite.net
using SQLite.Net;
using SQLite.Net.Platform.WinRT;
using SQLite.Net.Interop;
using SQLite.Net.Attributes;
//管它用不用先放进来
1)数据库路径:
/// <summary>
/// 数据路径
/// </summary>
public string DbName = "SQLite.db";//名字你就随便取了
public string DbPath;//可以再这初始化,亦可以在后面在初始化
// public string DbPath=Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
2)创建数据库连接:
#region 创建数据库链接
/// <summary>
/// 创建数据库连接
/// </summary>
/// <returns></returns>
internal SQLite.Net.SQLiteConnection GetCreateConn()
{
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
var con = new SQLite.Net.SQLiteConnection(new SQLitePlatformWinRT(), DbPath); return con; }
#endregion
3)创建数据库:
#region 创建数据库
/// <summary>
/// 如果没有数据库,就创建一个数据库。
/// </summary>
internal void CreateDB()
{/// <summary>
/// 数据库文件所在路径,这里使用 LocalFolder
/// </summary>
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
using (var conn = GetCreateConn())
{
//这里什么都不写就是创建一个空数据库
conn.CreateTable<ACCOURT>();//根据ACCOURT模型创建数据表 }
}
#endregion
特别说明:增删改这3个方法调用传入的ACCOURT addAccourt 参数,最好改为object类型,这样更具有通用性,应为一个APP不可能只有一个表
哇哈哈,写完才看到ACCOURT本来是写ACCOUNT的写错了,那就将错就错。嘎嘎。
4)插入数据:
#region 增
internal int AddData(ACCOURT addAccourt)
{
int result = ;
using (var conn = GetCreateConn())
{
result = conn.Insert(addAccourt);
conn.Close();
} return result;
}
#endregion
5)删除数据:
#region 删
internal int DeleteData(ACCOURT AccourtUID)
{
int result = ;
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
using (var conn = GetCreateConn())
{
result = conn.Delete(AccourtUID);
conn.Close();
}
return result;
} #endregion
6)修改数据:
#region 改
internal int UpadateData(ACCOURT updataAccourt)
{
int result = ;
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
using (var conn = GetCreateConn())
{
result = conn.Update(updataAccourt);
//conn.Close();
}
return result;
}
7)查询数据:
#region 查
/// <summary>
/// 模糊查询
/// </summary>
/// <param name="conditions">文本框输入的条件</param>
/// <returns></returns>
internal List<ACCOURT> CheckData(string conditions)
{ var temSTR = "%"+conditions+"%";
#region
using (var conn = GetCreateConn())
{ return conn.Query<ACCOURT>("select * from ACCOURT where Company like ? or Descr like ? or UID like ? or Mark like ? or Time like ? or Amount like ?;", temSTR, temSTR, temSTR, temSTR, temSTR, temSTR); }
#endregion
} #endregion
查询只个方法要说明下:这个他的原型:
Query<ACCOURT>(string sql,params objcet [] args)
Sql:这就不用说明了就是SQL语句。
params:不确定个数的参数列表。
Query<ACCOURT>("select * from ACCOURT where Company like ? or Descr like ? or UID like ? or Mark like ? or Time like ? or Amount like ?;", temSTR, temSTR, temSTR, temSTR, temSTR, temSTR)
//多字段模糊查询,SQL中有多少个"?"就在后面的params中输入多少个参数
8)读取数据:
#region 读
internal ObservableCollection<ACCOURT> ReadData(ObservableCollection<ACCOURT> accourt)
{
accourt.Clear();
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
CreateDB();
using (var conn = GetCreateConn())
{
var dbAccourt = conn.Table<ACCOURT>();
foreach (var item in dbAccourt)
{
accourt.Add(item);
}
//conn.Close();
}
return accourt;
}
#endregion
总结
可以看出:增、删、改 这3个方法是差不多的
查询要复杂一点,我想其他任何数据库应该都差不多,我自己目前还没有接触过其他的数据库。
哦,还有一点忘记了,在VS用代码分析的时候会提示:conn.Close(); 多次释放,最好还是删除它。
欢迎大家留言交流
最后是一个dome的代码:

[UWP小白日记-2]SQLite数据库DOME的更多相关文章
- UWP开发随笔——使用SQLite数据库
摘要 大多数的app都需要数据存储,在数据存储这方面,强大的windows把app数据分为两种:settings和files,并提供了十分简洁的api,让开发者能够轻松使用.但是在有些场景下,app的 ...
- [UWP小白日记-9]页面跳转过度动画(二)
又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...
- [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)
前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...
- [UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库
利用应用程序设置来实现此功能. 1.首先,获取APP设置的容器: ApplicationDataContainer localSettings = ApplicationData.Current.Lo ...
- [UWP小白日记-3]记账项目-1
学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放 ...
- [UWP小白日记-15]在UWP手机端实时限制Textbox的输入
说实话重来没想到验证输入是如此的苦逼的一件事情. 网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...
- [UWP小白日记-8]一些零碎的东西
设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...
- [UWP小白日记-12]使用新的Composition API来实现控件的阴影
前言 看了好久官方的Windows UI Dev Labs示例好久才有点心得,真是头大.(其实是英语幼儿园水平(⊙﹏⊙)b) 真的网上关于这个API的资料可以说几乎没有. 正文 首先用这东西的添加WI ...
- [UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)
瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子 ...
随机推荐
- 一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS.
一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS. 选择算法也就是求一个无序数组中第K大( ...
- 企业架构研究总结(44)——企业架构与建模之Archimate视图和视角
3. ArchiMate的视角与视图 创建.维护一个企业架构是一件非常复杂繁琐的事情,因为这项工作需要面对许多背景.利益各异的干系人,对他们所关注的问题进行解答,并能够在他们之间形成无障碍的沟通流.为 ...
- poj2236无线网络
这一题的大意:在救灾当中需要用网络,这堆人就用笔记本建了一个无线网,但是来,互相通信都是有距离限制的,一台电脑只能和距离他为d的电脑通信,然后一台电脑也可以通过几台电脑搭成线这样通信.然后就是输入每台 ...
- 网络负载均衡环境下wsHttpBinding+Message Security+Windows Authentication的常见异常
提高Windows Communication Foundation (WCF) 应用程序负载能力的方法之一就是通过把它们部署到负载均衡的服务器场中. 其中可以使用标准的负载均衡技术, Windows ...
- Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
Python:高级主题之(属性取值和赋值过程.属性描述符.装饰器) 背景 学习了Javascript才知道原来属性的取值和赋值操作访问的“位置”可能不同.还有词法作用域这个东西,这也是我学习任何一门语 ...
- WP8开发札记(一)WP8应用生命周期管理
在介绍生命周期前,我们先了解两个相关的概念. 1.墓碑机制:WP8与Android采用的真后台机制不同,WP8采用的是墓碑机制.一旦从当前应用程序离开(非退出),该应用会被墓碑化,这样可以更好的管理( ...
- on IRC, how to use secure connection(SSL) and get a cloak/vhost to hide your IP
On stackoverflow I found this: Follow this tutorial below: This is from http://superuser.com/questio ...
- PHP使用DomDocument抓取HTML内容
有时候会有需要从一个HTML页面来分离出你需要的一些数据来进行处理. 当然自己分析文件肯定可以,但是比较快速且方便的是使用正则表达式或者DOM. 鉴于正则表达式我不熟悉,所以我打算使用DOM来完成. ...
- 为outlook增加“邮件召回”功能
outlook 2007开始软件自带邮件召回功能.2003版本没有,可惜此版本盗版最厉害,用户很广,这次项目中用户分布很广,其中outlook2003版本用户数甚多,达到397人. 不可能让他们新装2 ...
- Linux:用at和crontab调度作业
一.有2种作业调度方式 1.突发性的,就是只运行作业一次而不是定期运行,使用at命令. 例如在进程A运行一段时间后关闭该进程. 2.定期运行,就是每隔一定的周期运行一次,使用crontab命令. 如每 ...