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

来源:互联网 发布:贴吧一键签到软件 编辑:程序博客网 时间:2024/05/16 18:05
数据库说简单点就是增删改查,但是对新手来说也是要爆肝的。作为一个新手爆肝无数次啊,

血的教训啊现在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         }

 

  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             #endregion21         }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的代码:

下载

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 报税的时候PIN码忘了怎么办 购房合同丢失开发商不给补怎么办 租赁合同丢了房东不退押金怎么办 小孩不愿意喝奶粉爱喝乳酸菌怎么办 长安通不记名卡丢了怎么办 农村电表箱里的开关坏了怎么办 建行手机银行登录密码忘了怎么办 手机银行登入密码忘记了怎么办 邮政手机银行登录密码忘了怎么办 建设手机银行登入密码忘记了怎么办 浪琴机械表秒针走的快怎么办 雷达晶萃陶瓷表镀金掉色怎么办 做信息稿部分人员没拍到照片怎么办 二建条件不够考后审核怎么办 学校官网的教务系统忘记密码怎么办 已参加两次高考失败还想复读怎么办 我高考失利想补习学藉怎么办 本科毕业证上是1寸照片怎么办 老婆父母不给户口本迁户口怎么办 深圳夫妻投靠双方再婚的网上怎么办 老人档案丢了要继承公证怎么办 农民把户口迁入城市后宅基地怎么办 离婚了再婚带孩子在上海上学怎么办 上班几天被公司辞退不发工资怎么办 在单位工作被领导边缘化该怎么办 退休人员户口迁到外地退休金怎么办 招工表填写和实际的有误怎么办 招工时档案年龄有人为改动怎么办 8个月宝贝还不会坐怎么办 朗动导航黑屏过了保修期怎么办 平板突然黑屏开不了机了怎么办 苹果ipad锁屏密码忘了怎么办 公司发资以两张工资表怎么办 面试谈好的工资结果发少了怎么办 老板面试没谈薪资让等电话怎么办 土地局把我的档案弄丢了怎么办 人事关系在医院不去上班怎么办 档案年龄多处涂改无法退休怎么办 个人办理退休原始档案丢了怎么办 在钢厂工作想辞职了怎么办呢 场地合同到期了公司不续签怎么办