欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

分享 Xamarin.android 关于使用SQLiteOpenHelper的小白经验

程序员文章站 2023-02-20 23:07:53
关于使用SQLiteOpenHelper的使用,对于小白的我,百度啦相当多的大神的介绍,均未能让我这新手(零基础)成功学会,参考了http://www.cnblogs.com/yaozhenfa/p/xamarin_android_sqliteopenhelper.html,我成功实验出我的第一个登 ......

关于使用sqliteopenhelper的使用,对于小白的我,百度啦相当多的大神的介绍,均未能让我这新手(零基础)成功学会,
参考了http://www.cnblogs.com/yaozhenfa/p/xamarin_android_sqliteopenhelper.html,
我成功实验出我的第一个登录注册程序
为使像我这样的小白能顺利开发,特分享我的经验;大神请指点不足,谢谢!
直接贴代码及步骤吧,原理我就不懂啦,
---------------------
作者:weixin_42671268
来源:csdn
原文:https://blog.csdn.net/weixin_42671268/article/details/87871246
版权声明:本文为博主原创文章,转载请附上博文链接!

1 //创建数据库链接,需要创建一个包喊数据库sqliteopenhelper的类文件:localsqliteopenhelper.cs;

using system.text;
using android.database;
using android.app;
using android.content;
using android.os;
using android.runtime;
using android.views;
using android.widget;
using android.database.sqlite;
namespace systemapp3
{
class localsqliteopenhelper : sqliteopenhelper//使用sqliteopenhelper,因为这个类会简化我们创建数据的步骤
{
public localsqliteopenhelper(context context): base(context, “littonb”, null, 1)//创建一个名为lib的数据库
{
}

    public override void oncreate(sqlitedatabase db)//oncreate方法仅会在数据库不存在的情况下才执行
    {
        db.execsql("create table userinfo(id integer primary key ,username text not null,password text not null)");//生成一张userinfo的表,(有3列:id,uname,upwd) (integer primary key为主键的意思,)(not null不为空)
    }

    public override void onupgrade(sqlitedatabase db, int oldversion, int newversion)//onupgrade方法使数据库版本需要更新时进行操作
    {
        db.execsql("drop table if exists userinfo");//检查是否有userinfo的表,有就删除,始终更新此表;
        oncreate(db);
    }

}

}

  然后去操作数据库
即在activity.cs文件中操作,
2 //登录按钮事件

loginbtn.click += (sender, e) =>
{ //登录按钮事件
string username1 = username.text;
string password1 = password.text;

            localsqliteopenhelper sqlhelper = new localsqliteopenhelper(this);
            //通过此段得到sqlhelper助手对象 

            sqlitedatabase db1 = sqlhelper.writabledatabase;
            // 得到数据对象db1,sqlhelper.writabledatabase为开启插入,修改,删除,查询功能,sqlhelper.readabledatabase只读取,如查询,
            //查询userinfo表里的条件是username and password都相同,的一条数据:
            icursor ic = db1.query("userinfo", new string[] {  "username", "password" }, " username= ? ",new string[] {username1 }, null, null, null);
            //db.query("userinfo", new string[] { "username", "password" }, "username=?", new string[] { username1, password1 }, null, null, null);
            //query查询方法,将username1, password1传入到dp1.;然后用游标icursor 方法查到并保存到cursor的结果集里ic.,
            // 第一个参数string:表名 // 第二个参数string[]:要查询的列名// 第三个参数string:查询条件 // 第四个参数string[]:查询条件的参数 
            // 第五个参数string:对查询的结果进行分组// 第六个参数string:对分组的结果进行限制// 第七个参数string:对查询的结果进行排序

            if (ic.movetofirst())//检查ic.结果集里有没有数据,如有执行if的下一步操作;
            {
                ic.movetofirst();

                string uname1 = ic.getstring(ic.getcolumnindex("username"));
                string upwd1 = ic.getstring(ic.getcolumnindex("password"));
                intent main = new intent(this, typeof(mainactivity)); //实例化意图 main,打开mainactivity.cs
                main.putextra("userid", username.text);//将userid取username的值,传送数值到mainactivity.cs上,
                startactivity(main);
                
            toast.maketext(this, uname1 + "  欢迎登陆!", toastlength.long).show();

            
            }
            else
            {
                toast.maketext(this, "用户: " + username.text + " 或密码无效!", toastlength.long).show();
            }

  3 //注册按钮事件

registernewbtn.click += (sender, e) =>
{ //注册按钮事件
//创建数据库链接,需要创建一个包喊数据库sqliteopenhelper的类文件:localsqliteopenhelper.cs;
localsqliteopenhelper dbhelper = new localsqliteopenhelper(this);
// 得到数据对象db1,sqlhelper.writabledatabase为开启插入,修改,删除,查询功能,sqlhelper.readabledatabase只读取,如查询,
sqlitedatabase db = dbhelper.writabledatabase;
//以下为开启插入指令,
//contentvalues类型,通过它我们可以大大的简化自己拼接插入语句的繁琐,比如下面我们可以设置uname字段的值为usernewid.text,upwd的值为newpswd1.text;
contentvalues cv = new contentvalues();
cv.put(“username”, usernewid.text);
cv.put("password ", newpswd1.text);
//关键就是put方法,它拥有以下的重载方法。
//public void put(string key, bool value); //public void put(string key, byte[] value);
//public void put(string key, double value); // public void put(string key, float value);
// public void put(string key, int value); // public void put(string key, long value);
// public void put(string key, sbyte value); // public void put(string key, short value);
// public void put(string key, string value);
// 通过以上这些重载方法我们就可以插入不同类型的参数
// 获取不同字段的值如下public object get(string key);
//public bool getasboolean(string key); // public sbyte getasbyte(string key);
// public byte[] getasbytearray(string key); // public double getasdouble(string key);
// public float getasfloat(string key); // public int getasinteger(string key);
// public long getaslong(string key); // public short getasshort(string key);
// public string getasstring(string key);。
//将以上值设置到表中的列里后,我们将执行以下查询功能,是否用户名重复,
icursor ic = db.query(“userinfo”, new string[] { “id”, “username”, “password” }, " username = ? ", new string[] { usernewid.text }, null, null, null);

            if (ic.movetofirst())
            {
                string uname1 = ic.getstring(ic.getcolumnindex("username"));
                string upwd1 = ic.getstring(ic.getcolumnindex("password"));
                if (uname1 == usernewid.text)
                {
                  toast.maketext(this, uname1 + "  用户名重复!", toastlength.long).show();
                }
                else
                {
                    toast.maketext(this, uname1 + "注册失败 !", toastlength.long).show();
                    
                }
            }
            else
                {
                long id = db.insert("userinfo", null, cv);//值设置到表中的列里后,它来添加一条数据到userinfo表中;
                toast.maketext(this, usernewid.text + "注册成功 !", toastlength.long).show();
                
            }
          };

  原创分享请注明出处!