Xamarin android使用Sqlite做本地存储数据库

小编 2026-07-02 阅读:737 评论:0
android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用Local...

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

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

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

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

Xamarin android使用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 如图

Xamarin android使用Sqlite做本地存储数据库

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 + "
");            }            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

转载随意注明出处



版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表