Xamarin android使用Sqlite做本地存储数据库
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两个类库而已。比较方便的一种,可以直接看源码。
2.创建一个实体UserInfo.cs
[Table("UserInfo")]
public class UserInfo
{
[PrimaryKey,AutoIncrement,Collation("Id")]
public int Id { get; set; }
public string UserName { get; set; }
public string Pwd { get; set; }
}
3.MainActivity.cs 代码开单词就知道是什么意思
public class MainActivity : Activity
{
int count = 1;
private SQLiteConnection sqliteConn;
private const string TableName = "UserInfo";
private string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "userinfo.db3");
private Button btnLogin;
private Button btnRegister;
private TextView tv_user;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
sqliteConn = new SQLiteConnection(dbPath);
btnLogin = FindViewById<Button>(Resource.Id.btn_login);
btnRegister = FindViewById<Button>(Resource.Id.btn_register);
tv_user = FindViewById<TextView>(Resource.Id.tv_user);
btnLogin.Click += delegate {
var userName = FindViewById<EditText>(Resource.Id.userName).Text;
var pwd = FindViewById<EditText>(Resource.Id.pwd).Text;
Login(userName,pwd);
};
btnRegister.Click += delegate
{
var userName = FindViewById<EditText>(Resource.Id.userName).Text;
var pwd = FindViewById<EditText>(Resource.Id.pwd).Text;
Register(userName,pwd);
};
}
private void Login(string userName,string pwd)
{
if (!File.Exists(dbPath))
{
sqliteConn = new SQLiteConnection(dbPath);
}
var userInfoTable = sqliteConn.GetTableInfo(TableName);
if (userInfoTable.Count == 0)
{
sqliteConn.CreateTable<UserInfo>();
}
var userInfos = sqliteConn.Table<UserInfo>();
var userInfo = userInfos.Where(p => p.Pwd == pwd && p.UserName == userName).FirstOrDefault();
if (userInfo == null)
{
Toast.MakeText(this, "用户名或密码不正确", ToastLength.Short).Show();
}
else
{
Toast.MakeText(this, "登录成功", ToastLength.Short).Show();
}
}
private void ShowUser()
{
if (!File.Exists(dbPath))
sqliteConn = new SQLiteConnection(dbPath); var userInfoTable = sqliteConn.Table<UserInfo>();
StringBuilder sb = new StringBuilder();
foreach (var item in userInfoTable)
{
sb.Append("username:" + item.UserName + "pwd:" + item.Pwd + "\n");
}
tv_user.Text = sb.ToString();
}
private void Register(string userName,string pwd)
{
if(!File.Exists(dbPath))
sqliteConn = new SQLiteConnection(dbPath);
var userInfoTable = sqliteConn.GetTableInfo(TableName);
if (userInfoTable.Count == 0)
{
sqliteConn.CreateTable<UserInfo>();
}
UserInfo model = new UserInfo() {Id=1, UserName=userName,Pwd=pwd };
sqliteConn.Insert(model);
Toast.MakeText(this, "注册成功", ToastLength.Short).Show(); ShowUser();
}
}
现在是已经能增删改查了,但是如何查看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做本地存储数据库的更多相关文章
- 使用SQLite做本地数据缓存的思考
前言 在一个分布式缓存遍地都是的环境下,还讲本地缓存,感觉有点out了啊!可能大家看到标题,就没有想继续看下去的欲望了吧.但是,本地缓存的重要性也是有的! 本地缓存相比分布式缓存确实是比较out和比较 ...
- 本地存储数据库indexedDB实现离线预览的功能
今天在学习<高级JS编程>,看到离线存储,cookie和session都十分的熟悉,但是书中还提到了indexedDB和webSQL(已废弃),indexedDB可以像mysql一样建表, ...
- Xamarin.Android之SQLite.NET ORM
一.前言 通过<Xamarin.Android之SQLiteOpenHelper>和<Xamarin.Android之ContentProvider>的学习,我们已经掌握了如何 ...
- ionic 运用pouchdb/sqlite 数据库做本地存储
配置数据库环境需要3步: 1.安装slqite插件 在ionic 工程目录对应终端执行一下命令: npm install cordova-plugin-sqlite 2.安装pouchdb 在ioni ...
- iOS本地存储-数据库(FMDB)
初识FMDB iOS中原声的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦,于是就出现了一系列将SQLite封装的库.本文讲解的FMDB就是其中的一个. FMDB PK ...
- Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常
异常: Android.Database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 10 此错误是数据返回 ...
- 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 ...
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!
Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...
- Xamarin.Android开发实践(十四)
Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文 ...
随机推荐
- Linux上安装和卸载mysql数据库 (一)
一.前言 第一次写博客,很激动同时有点畏惧,激动是我可以将我的经验进行分享,畏惧是我怕我写的东西,大家借鉴的时候,有些步骤不能成功.不过,我还是很有信息的,我分享的经验都是我搭建成功以后才分享出来.这 ...
- is 和==的区别
Python中的对象包含三要素:id.type.value.其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值.is判断的是a对象是否就是b对象,是通过id来判断的.==判断的 ...
- 模块化编程node
众所周知,Node.js 的出现造就了全栈工程师,因为它让 JavaScript 的舞台从浏览器扩大到了服务端 而 Node.js 的强大也得益于它庞大的模块库,所以学习 Node.js 第一步还得从 ...
- js计时函数实现秒表的开始-暂停-清零功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 51Nod 1352 集合计数 扩展欧几里得
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足 ...
- MYSQL 主从复制---原理
复制的核心步骤 在主库上把数据更改记录到二进制日志(Binary Log)中; 备库将主库上的日志复制到自己的中继日志(Relay Log)中; 备库读取中继日志中的事件,将其重放到备库数据之上; 下 ...
- appium+Linux环境安装配置
背景:想要在Jenkins上跑appium的自动化测试,所以想要在Jenkins服务器(Linux远程)上安装appium服务,故而研究了一下appium+Linux下安装.虽然有无数的前辈踩过坑 ...
- JAVA IO分析一:File类、字节流、字符流、字节字符转换流
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- 深港澳大湾区第三次.NET技术交流会圆满成功
2017年12月10日,一场以云.devops.微服务.容器是现在这个发展阶段的软件形态, 本次活动我们围绕这些话题介绍.NET生态下的发展本地社区活动,这次活动还得到如鹏网杨中科老师的大力支持开通网 ...
- Python搭建Web服务器,与Ajax交互,接收处理Get和Post请求的简易结构
用python搭建web服务器,与ajax交互,接收处理Get和Post请求:简单实用,没有用框架,适用于简单需求,更多功能可进行扩展. python有自带模块BaseHTTPServer.CGIHT ...