• 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两个类库而已。比较方便的一种,可以直接看源码。

    1.nuget引用sqlite-net 如图


    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还是挺有意思,先睡了吧

  • 相关阅读:
    Service Fabric 用 Powershell 部署应用到本地
    Redis 高可用之哨兵模式(二)
    Redis 高可用之哨兵模式
    微服务之Service Fabric 系列 (一):概览、环境安装
    Nginx 负载均衡
    Redis 总结
    微服务示例-Spring Cloud
    ASP.NET Core Linux 发布
    Windows RabbitMQ 安装
    Nancy 框架学习
  • 原文地址:https://www.cnblogs.com/zhangmumu/p/7374788.html
Copyright © 2020-2023  润新知