[UWP小白日记-2]SQLite数据库DOME

  数据库说简单点就是增删改查,但是对新手来说也是要爆肝的。作为一个新手爆肝无数次啊,

血的教训啊现在UWP的教程又少,说多了都是泪。留下来免得以后又爆肝。还有:一定要写注释!一定要写注释!一定要写注释! 重要的事情说三遍!

  1.首先,准备工作:

  1)引用:

      

    获取途径:VS里的扩展和更新、NuGet等。

  2)数据库模型:

 1 internal class ACCOURT
 2     {
 3         public ACCOURT() { }  //空构造函数
 4        public ACCOURT(int ID,double Amount,string Descr,DateTime Time,string Mark,string Company)
 5         {//重载构造函数,用来后面把UI上的数据传入数据库
 6             this.UID = ID;
 7             this.Amount = Amount;
 8             this.Descr = Descr;
 9             this.Time = Time;
10             this.Mark = Mark;
11             this.Company = Company;
12         }
13         /// <summary>
14         /// 编号
15         /// </summary>
16         [PrimaryKey] //主键
17         [AutoIncrement]//自增
18         [NotNull]//不能为空
19         public int UID { get; set; }
20
21         /// <summary>
22         /// 金额
23         /// </summary>
24         public double Amount { get; set; }
25
26         /// <summary>
27         /// 备注
28         /// </summary>
29         public string Descr { get; set; }
30
31         /// <summary>
32         /// 时间
33         /// </summary>
34         public DateTime Time { get; set; }
35
36         /// <summary>
37         /// 标签
38         /// </summary>
39         public string Mark { get; set; }
40
41         /// <summary>
42         /// 所属公司
43         /// </summary>
44         public string Company { get; set; }
45     }

  3.写帮助类:

   0)引入SQLite.net

1 using SQLite.Net;
2 using SQLite.Net.Platform.WinRT;
3 using SQLite.Net.Interop;
4 using SQLite.Net.Attributes;
5 //管它用不用先放进来

  1)数据库路径:

1  /// <summary>
2  /// 数据路径
3 /// </summary>
4  public string DbName = "SQLite.db";//名字你就随便取了
5  public string DbPath;//可以再这初始化,亦可以在后面在初始化
6 // public string DbPath=Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);

  2)创建数据库连接:

 1 #region 创建数据库链接
 2         /// <summary>
 3         /// 创建数据库连接
 4         /// </summary>
 5         /// <returns></returns>
 6         internal SQLite.Net.SQLiteConnection GetCreateConn()
 7         {
 8             DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
 9             var con = new SQLite.Net.SQLiteConnection(new SQLitePlatformWinRT(), DbPath);
10
11             return con;
12
13         }
14         #endregion

  3)创建数据库:

 1 #region 创建数据库
 2         /// <summary>
 3         /// 如果没有数据库,就创建一个数据库。
 4         /// </summary>
 5         internal void CreateDB()
 6         {/// <summary>
 7          /// 数据库文件所在路径,这里使用 LocalFolder
 8          /// </summary>
 9             DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
10             using (var conn = GetCreateConn())
11             {
12                 //这里什么都不写就是创建一个空数据库
13                 conn.CreateTable<ACCOURT>();//根据ACCOURT模型创建数据表
14
15             }
16         }
17         #endregion

  特别说明:增删改这3个方法调用传入的ACCOURT addAccourt 参数,最好改为object类型,这样更具有通用性,应为一个APP不可能只有一个表

哇哈哈,写完才看到ACCOURT本来是写ACCOUNT的写错了,那就将错就错。嘎嘎。

  4)插入数据:

 1 #region 增      
 2         internal int AddData(ACCOURT addAccourt)
 3         {
 4             int result = 0;
 5             using (var conn = GetCreateConn())
 6             {
 7                 result = conn.Insert(addAccourt);
 8                 conn.Close();
 9             }
10
11             return result;
12         }
13         #endregion

  5)删除数据:

 1 #region 删
 2         internal int DeleteData(ACCOURT AccourtUID)
 3         {
 4             int result = 0;
 5             DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
 6             using (var conn = GetCreateConn())
 7             {
 8                 result = conn.Delete(AccourtUID);
 9                 conn.Close();
10             }
11             return result;
12         }
13
14         #endregion

  6)修改数据:

 1  #region 改
 2         internal int UpadateData(ACCOURT updataAccourt)
 3         {
 4             int result = 0;
 5             DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
 6             using (var conn = GetCreateConn())
 7             {
 8                 result = conn.Update(updataAccourt);
 9                 conn.Close();
10             }
11             return result;
12         }
 1 /// <summary>
 2         /// 重载:当删除表中所有数据的时候重置UID
 3         /// 删除其中一条的话要自己重新用代码给重置UID。
 4         /// 这里就不演示了
 5         /// sqlite_sequence这个是SQLITE自动创建的表,里面存有当前数据库文件中所有表的数据序号,
 6         /// 只要清除它就可重置UID等自动编号了
 7         /// UPDATE sqlite_sequence SET seq = 0 WHERE name = ‘ACCOURT‘;
 8         /// </summary>
 9         /// <param name="deleteSqliteSequence">sql语句</param>
10         /// <returns></returns>
11         internal void UpadateData(string deleteSqliteSequence)
12         {
13
14             DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
15
16
17         }
18
19         #endregion

  7)查询数据:

 1 #region 查
 2         /// <summary>
 3         /// 模糊查询
 4         /// </summary>
 5         /// <param name="conditions">文本框输入的条件</param>
 6         /// <returns></returns>
 7         internal List<ACCOURT> CheckData(string conditions)
 8         {
 9
10             var temSTR = "%"+conditions+"%";
11             #region
12             using (var conn = GetCreateConn())
13             {
14
15                 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);
16
17
18
19             }
20             #endregion
21         }
22
23         #endregion

  查询只个方法要说明下:这个他的原型:

1 Query<ACCOURT>(string sql,params objcet [] args)

Sql:这就不用说明了就是SQL语句。

params:不确定个数的参数列表。

  

1 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)
2 //多字段模糊查询,SQL中有多少个"?"就在后面的params中输入多少个参数

  8)读取数据:

 1 #region 读
 2         internal ObservableCollection<ACCOURT> ReadData(ObservableCollection<ACCOURT> accourt)
 3         {
 4             accourt.Clear();
 5             DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
 6             CreateDB();
 7             using (var conn = GetCreateConn())
 8             {
 9                 var dbAccourt = conn.Table<ACCOURT>();
10                 foreach (var item in dbAccourt)
11                 {
12                     accourt.Add(item);
13                 }
14                 conn.Close();
15             }
16             return accourt;
17         }
18         #endregion

总结

可以看出:增、删、改 这3个方法是差不多的

查询要复杂一点,我想其他任何数据库应该都差不多,我自己目前还没有接触过其他的数据库。

哦,还有一点忘记了,在VS用代码分析的时候会提示:conn.Close(); 多次释放,最好还是删除它。                           

欢迎大家留言交流

最后是一个dome的代码:

下载

时间: 2024-12-19 09:32:36

[UWP小白日记-2]SQLite数据库DOME的相关文章

[UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Entity Framework Core(Entity Framework 7)下文将简称:EF 1.在UWP中使用EF需要更新Microsoft.NETCore.UniversalWindowsPlatform到大于“5.2.2”的版本. 2.直接在“程序包管理器控制台”输入命令来更新:Update-P

[UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库

利用应用程序设置来实现此功能. 1.首先,获取APP设置的容器: ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 由于获取容器的时候并没有给key为FirestStart的赋值,所以下面就直接判断是不是为null,为null就是第一次运行APP, 然后在else里给key为FirestStart的赋值,那么else的代码就只能执行一次了.当然以后在UI上可以添加一个switchButt

[UWP小白日记-3]记账项目-1

学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放gridview,用来放标签.利用DataTemplate读取数据库里的标签表. 头部标题和底部标签没什么好说的,主要说下那个pivot的实现. 先来看看图,就知道有什么问题了,然后在解决这个问题. 鼠标点最左边尽然也能跳转页面,这什么鬼,改了他的默认Styel一样不行. 1 <Style x:Ke

[UWP小白日记-15]在UWP手机端实时限制Textbox的输入

说实话重来没想到验证输入是如此的苦逼的一件事情. 网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直接把Textbox的属性InputScope设置为"Number"就是了,反正在目前版本的UWP中纯数字键盘还无法切换到其他的字符键盘去 下面的代码是一个金额文本框的验证,算是抛砖引玉吧.欢迎还有更好的方案指点! 直接上代码: /// <summary> /// 检查输入金额,当检测到

[UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)

瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子的.(⊙﹏⊙)b , 正文 其实这个小程序,关键就是读取文件的时候要正确的转码,应为系统TXT文本默认使用的是ANIS编码,而XmlDocument使用的是UTF8. 不转码妥妥的乱码. 先来看下成品,最后我会打包为APP供大家使用的.(GIF录制工具ScreenToGif,开源并且使用的是WPF开

[UWP小白日记-3]记账项目-2

手机端: PC端: 待续……

[UWP小白日记-14]正则表达式

匹配浮点数: ^(([1-9]+[0-9]*.{1}[0-9]+)|([0].{1}[1-9]+[0-9]*)|([1-9][0-9]*)|([0][.][0-9]+[1-9]*))$ 匹配2位浮点数:^(([1-9]+[0-9]*.{1}[0-9]{1,2})|([0].{1}[1-9]+[0-9]{1,2})|([1-9][0-9]{1,2})|([0][.][0-9]+[1-9]{1,2}))$ 来自为知笔记(Wiz)

[UWP小白日记-4]记账项目-2

手机端: 待续…… 哈哈这个代码真是好长时间啊,没办法萌新你们都懂的,UI是改了又改,知识也在慢慢积累, 所以这效率就低下了点 UI是改了又改,代码是不断了改,所以搞到现在都没开发完成

小白5分钟上手c#数据库操作(一) 搭建简单的Sqlite数据库

搭建好Sqlite数据库环境,构建一个简单的SQlite数据库文件 1. 安装 SQlite Database Browser 2. 新建一个数据库 3. 新建一张表 4. 添加一些字段 5. 添加数据 保存,命名为Student.db OK, 用了几分钟我们的数据库已经准备妥当,下面就开始通过c#操作数据库. 原文地址:https://www.cnblogs.com/chenyingzuo/p/12099451.html