android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思)。

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。

如果不是很熟悉Sqlite,建议花点时间看看鸟巢sqlite基础教程

下面我们就开始学习一下在Xamarin android中如何使用Sqlite呢?首先我们还是这个最终的效果图,主要的流程就是先注册添加一条用户数据,然后登陆sqlite数据库,也就是做一个添加和查询。先看一下效果图:

这里要注意一下,Nuget上关于sqlite的xamarin类库非常多,很多国外的作者都写了sqlite的类库,所以要注意甄别,你会发现使用的方法几乎是一样的。

https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs

引入sqlite-net ,仅仅是多了SQLite.cs 和 SQLiteAsync.cs两个类库而已。比较方便的一种,可以直接看源码。

1.nuget引用sqlite-net 如图

2.创建一个实体UserInfo.cs

  1. [Table("UserInfo")]
  2. public class UserInfo
  3. {
  4. [PrimaryKey,AutoIncrement,Collation("Id")]
  5. public int Id { get; set; }
  6. public string UserName { get; set; }
  7. public string Pwd { get; set; }
  8. }

3.MainActivity.cs 代码开单词就知道是什么意思

  1.     public class MainActivity : Activity
  2.     {
  3.         int count = 1;
  4.         private SQLiteConnection sqliteConn;
  5.         private const string TableName = "UserInfo";
  6.         private string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "userinfo.db3");
  7.         private Button btnLogin;
  8.         private Button btnRegister;
  9.         private TextView tv_user;
  10.         protected override void OnCreate(Bundle bundle)
  11.         {
  12.             base.OnCreate(bundle);
  13.             SetContentView(Resource.Layout.Main);
  14.             sqliteConn = new SQLiteConnection(dbPath);
  15.             btnLogin = FindViewById<Button>(Resource.Id.btn_login);
  16.             btnRegister = FindViewById<Button>(Resource.Id.btn_register);
  17.             tv_user = FindViewById<TextView>(Resource.Id.tv_user);
  18.             btnLogin.Click += delegate {
  19.                 var userName = FindViewById<EditText>(Resource.Id.userName).Text;
  20.                 var pwd = FindViewById<EditText>(Resource.Id.pwd).Text;
  21.                 Login(userName,pwd);
  22.             };
  23.             btnRegister.Click += delegate
  24.             {
  25.                 var userName = FindViewById<EditText>(Resource.Id.userName).Text;
  26.                 var pwd = FindViewById<EditText>(Resource.Id.pwd).Text;
  27.                 Register(userName,pwd);
  28.             };
  29.         }
  30.         private void Login(string  userName,string  pwd)
  31.         {
  32.             if (!File.Exists(dbPath))
  33.             {
  34.                 sqliteConn = new SQLiteConnection(dbPath);
  35.             }
  36.             var userInfoTable = sqliteConn.GetTableInfo(TableName);
  37.             if (userInfoTable.Count == 0)
  38.             {
  39.                 sqliteConn.CreateTable<UserInfo>();
  40.             }
  41.             var userInfos = sqliteConn.Table<UserInfo>();
  42.             var userInfo = userInfos.Where(p => p.Pwd == pwd && p.UserName == userName).FirstOrDefault();
  43.             if (userInfo == null)
  44.             {
  45.                 Toast.MakeText(this, "用户名或密码不正确", ToastLength.Short).Show();
  46.             }
  47.             else
  48.             {
  49.                 Toast.MakeText(this, "登录成功", ToastLength.Short).Show();
  50.             }
  51.         }
  52.         private void ShowUser()
  53.         {
  54.             if (!File.Exists(dbPath))
  55.                 sqliteConn = new SQLiteConnection(dbPath);
  56.  
  57.             var userInfoTable = sqliteConn.Table<UserInfo>();
  58.             StringBuilder sb = new StringBuilder();
  59.             foreach (var item in userInfoTable)
  60.             {
  61.                  sb.Append("username:" + item.UserName + "pwd:" + item.Pwd + "\n");
  62.             }
  63.             tv_user.Text = sb.ToString();
  64.         }
  65.         private void Register(string  userName,string pwd)
  66.         {
  67.             if(!File.Exists(dbPath))
  68.                 sqliteConn = new SQLiteConnection(dbPath);
  69.          
  70.             var userInfoTable = sqliteConn.GetTableInfo(TableName);
  71.             if (userInfoTable.Count == 0)
  72.             {
  73.                 sqliteConn.CreateTable<UserInfo>();
  74.             }
  75.             UserInfo model = new UserInfo() {Id=1, UserName=userName,Pwd=pwd };
  76.              sqliteConn.Insert(model);
  77.             Toast.MakeText(this, "注册成功", ToastLength.Short).Show();
  78.  
  79.             ShowUser();
  80.         }
  81.     }

现在是已经能增删改查了,但是如何查看xamarin android中sqlite的数据库呢,adb shell进入sqlite数据库即可查看

就这样吧,代码比较简单,sqlite还是挺有意思,先睡了吧。

例子下载地址:http://download.csdn.net/detail/kebi007/9718965

作者:张林

标题:amarin android使用Sqlite做本地存储数据库 原文地址:http://blog.csdn.net/kebi007/article/details/53795552

转载随意注明出处


Xamarin android使用Sqlite做本地存储数据库的更多相关文章

  1. 使用SQLite做本地数据缓存的思考

    前言 在一个分布式缓存遍地都是的环境下,还讲本地缓存,感觉有点out了啊!可能大家看到标题,就没有想继续看下去的欲望了吧.但是,本地缓存的重要性也是有的! 本地缓存相比分布式缓存确实是比较out和比较 ...

  2. 本地存储数据库indexedDB实现离线预览的功能

    今天在学习<高级JS编程>,看到离线存储,cookie和session都十分的熟悉,但是书中还提到了indexedDB和webSQL(已废弃),indexedDB可以像mysql一样建表, ...

  3. Xamarin.Android之SQLite.NET ORM

    一.前言 通过<Xamarin.Android之SQLiteOpenHelper>和<Xamarin.Android之ContentProvider>的学习,我们已经掌握了如何 ...

  4. ionic 运用pouchdb/sqlite 数据库做本地存储

    配置数据库环境需要3步: 1.安装slqite插件 在ionic 工程目录对应终端执行一下命令: npm install cordova-plugin-sqlite 2.安装pouchdb 在ioni ...

  5. iOS本地存储-数据库(FMDB)

    初识FMDB iOS中原声的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦,于是就出现了一系列将SQLite封装的库.本文讲解的FMDB就是其中的一个. FMDB PK ...

  6. Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常

    异常: Android.Database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 10 此错误是数据返回 ...

  7. Xamarin.Android 使用 SQLite 出现 Couldn't read row 0, col -1 from CursorWindow. 异常

    异常:Java.Lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cu ...

  8. Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

    Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...

  9. Xamarin.Android开发实践(十四)

    Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文 ...

随机推荐

  1. (转载)java 枚举 循环遍历以及一些简单常见的使用

    本文转载自:http://blog.csdn.net/qq_27093465/article/details/51706076 作者:李学凯 什么时候想用枚举类型: 有时候,在设计一个java mod ...

  2. Code Kata:超级偶数数列 javascript实现

    超级偶数(SuperEven)是指每一位都是偶数的正整数,例如: 0,2,4,6,8,20,22,24,26,28,40,...,88,200,202,... 要求写一个函数,输入项数n,返回数列第n ...

  3. jstl--->Core 核心标签库->流程控制

    jstl--->Core 核心标签库->流程控制 -->if.choose.when.otherwise  <c:if>条件判断 语法1:没有本体内容  <c:if ...

  4. 【jQuery插件】使用cropper实现简单的头像裁剪并上传

    插件介绍 这是一个我在写以前的项目的途中发现的一个国人写的jQuery图像裁剪插件,当时想实现用户资料的头像上传功能,并且能够预览图片,和对图片进行简单的裁剪.旋转,花了不少时间才看到了这个插件,感觉 ...

  5. chromium源码阅读--HTTP Cache

    最近积累了一些关于HTTP缓存的知识,因此结合Chromium的实现总结一下,主要从如下2个分面: 1.HTTP缓存的基础知识 2.Chromium关于HTTP缓存的实现分析 一.HTTP缓存的基础知 ...

  6. MySql的技术规范-企业版(来源于MySql官网)

    MySQL技术规范 Oracle MySQL云服务 MySQL数据库即服务 灵活的架构 开源 多线程 可插拔的存储引擎架构 InnoDB,NDB集群 MyISAM,合并,内存,存档 ANSI SQL标 ...

  7. MySQL管理员珍藏:十大必备工具盘点

    作者:dongdongzzcs 第1页: [IT168 专稿]本文的作者Daniel Nichter是MySQL工具的开发者,他为MySQL管理员推荐了十款必备工具.以下是全文内容: MySQL是一套 ...

  8. poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分

    poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...

  9. PAT B1045 快速排序(25)

    1045. 快速排序(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 著名的快速排序算法里有一个经典的划分 ...

  10. 在Linux中使用线程

    我并不假定你会使用Linux的线程,所以在这里就简单的介绍一下.如果你之前有过多线程方面的编程经验,完全可以忽略本文的内容,因为它非常的初级. 首先说明一下,在Linux编写多线程程序需要包含头文件p ...