天天看點

Xamarin android使用Sqlite做本地存儲資料庫

android使用Sqlite做本地存儲非常常見(打個比方就像是浏覽器要做本地存儲使用LocalStorage,貌似不是很恰當,大概就是這個意思)。

SQLite 是一個軟體庫,實作了自給自足的、無伺服器的、零配置的、事務性的 SQL 資料庫引擎。SQLite 是在世界上最廣泛部署的 SQL 資料庫引擎。SQLite 源代碼不受版權限制。

如果不是很熟悉Sqlite,建議花點時間看看鳥巢

http://www.runoob.com/sqlite/sqlite-tutorial.html 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 + "\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 http://blog.csdn.net/kebi007/article/details/52887570

轉載随意注明出處