[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类,嗯就是这个样子 ...
随机推荐
- 关于GNU软件的版本号命名规则
这里所说的版本号命名并非指“正式版”.“测试版”这种方式,而是在讨论版本编号的问题,例如Linux内核3.0以后的版本命名规则是3.A.B,A是内核的版本,B是安全补丁.那么对于一般的软件的版本号命名 ...
- CSS中文字体的英文名称 – 前台开发必备
做什么用的?写过CSS的都晓得,一般用在font-family后面——为什么不用中文呢?有过一定开发经验的都晓得CSS里面用中文也是会乱码的,特别是没有中文字符集的浏览器,直接成了框框,用英文就可以解 ...
- selenium-webdriver(python) 11
selenium-webdriver(python) (十一) 本节重点: 控制滚动条到底部 有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作.一般 ...
- Go语言Web框架gwk介绍 1
Go语言Web框架gwk介绍 (一) 今天看到Golang排名到前30名了,看来关注的人越来越多了,接下来几天详细介绍Golang一个web开发框架GWK. 现在博客园支持markdown格式发布 ...
- 利用微信公众平台实现自动回复消息—java版
最近公司需要拿微信公众平台做个东西,所以就开始了最基本学习,网上很多是php版的,对于我这个只会java,不会php的就只能在网上找点只言片语来一点一点学习了.不费话了直接贴图看效果(很简单的). 不 ...
- tornado with MySQL, torndb, django model, SQLAlchemy ==> JSON dumped
现在,我们用torndo做web开发框架,用他内部机制来处理HTTP请求.传说中的非阻塞式服务. 整来整去,可谓之一波三折.可是,无论怎么样,算是被我做成功了. 在tornado服务上,采用三种数据库 ...
- hdu1205(类似 分布垃圾数列)
Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequen ...
- 设置代码ios 6添加日历事件No calendar has been set.错误
查了好多资料,发明还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 在iOS 6做日历事件添加时,来来回回报错,No calendar has been set ...
- 常见缓存算法和LRU的c++实现
对于web开发而言,缓存必不可少,也是提高性能最常用的方式.无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者red ...
- Fragment与Activity交互(使用Handler)
1.在Activity中定义一个方法用来设置Handler对象 public void setHandler(Handler handler) {mHandler = handler;} 2.在Fra ...