Android 实现数据库存储登录过的用户名和密码

6 篇文章 0 订阅
3 篇文章 0 订阅

前文:提到存储,很多都知道Android用到的存储,在实现保存用户名,密码得时候,有些也是用SP来存储得,但是SP存储的有局限性,但是Android 内嵌得数据库存储,刚好可以满足这个需求,下面本wolf为大家实现一下Android 数据库存储用户名,密码。

 

一、首先要创建数据库跟表字段,,所以先创建数据库管理子类,继承SQLiteOpenHelper,重写方法。

public class DBHelper extends SQLiteOpenHelper {


    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        //context 上下文对象
        //name 数据库名称
        //factory 可选的游标工厂,通常为null
        //version 数据库版本号
        super(context, name, factory, version);
    }

    /**
     * 创建表,第一次创建时候调用
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table login_info(id integer primary key autoincrement," +
                "loginName varchar unique,passWord varchar)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

二、创建数据库,读写权限,写出单例供使用

private static DataBaseManager manager;
    private DBHelper mHelper;
    private SQLiteDatabase sqLiteDatabase;
    private Context mContext;

    public DataBaseManager(Context mContext) {
        this.mContext = mContext;
        mHelper = new DBHelper(mContext, Constant.DB_NAME,null,1);
        sqLiteDatabase = mHelper.getWritableDatabase();
    }

    public static DataBaseManager getInstance(Context context){
        if(manager == null){
            synchronized (DataBaseManager.class) {
                if (manager == null)
                    manager = new DataBaseManager(context);
            }
        }
        return manager;

    }

三、大家都知道得增删改查语句,对这个不理解,可以看看SQL语句大全

  /**
     * 插入一条数据
     * @param loginName
     * @param passWord
     */
    public void insertMessage(String loginName,String passWord){
        if(sqLiteDatabase == null)  return;
        if(TextUtils.isEmpty(loginName) || TextUtils.isEmpty(passWord)) return;
        try {
            String sql = "insert into "+Constant.TABLE_NAME+" (loginName,passWord) values (?,?)";
            Log.d("sql===","sql 语句:"+sql);
            sqLiteDatabase.execSQL(sql,new String[]{loginName,passWord});
        }catch (Exception e){
            e.printStackTrace();
            updateMessage(loginName,passWord);
        }

    }

    /**
     * 删除一条数据
     * @param loginName
     */
    public void deleteMessage(String loginName){
        if(sqLiteDatabase == null)  return;
        if(TextUtils.isEmpty(loginName)) return;
        String sql = "delete from "+Constant.TABLE_NAME+" where loginName = "+loginName;
        Log.d("sql===","sql 语句:"+sql);
        sqLiteDatabase.execSQL(sql);

    }

    public void updateMessage(String loginName,String passWord){
        if(sqLiteDatabase == null)  return;
        if(TextUtils.isEmpty(loginName) || TextUtils.isEmpty(passWord)) return;

        String sql = "update "+Constant.TABLE_NAME+" set passWord=? where loginName=?";
        Log.d("sql===","sql 语句:"+sql);
        sqLiteDatabase.execSQL(sql,new String[]{loginName,passWord});

    }

    public List<LoginNameBean> queryAllData(){
        List<LoginNameBean> list = new ArrayList<>();
        if(sqLiteDatabase == null)  return list;
        String sql = "select * from "+Constant.TABLE_NAME;
        Log.d("sql===","sql 语句:"+sql);
        Cursor cursor = sqLiteDatabase.rawQuery(sql,null);
        if(cursor!=null){
            while (cursor.moveToNext()){
                LoginNameBean bean = new LoginNameBean();
                bean.loginName = cursor.getString(cursor.getColumnIndex("loginName"));
                bean.pwd = cursor.getString(cursor.getColumnIndex("passWord"));
                list.add(bean);
            }
        }
        cursor.close();
        return list;
    }

四:根据需求往项目里进行使用。

在登录成功得接口回调调用insert方法

   @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_login:
                String loginName = et_loginName.getText().toString().trim();
                String password = et_password.getText().toString().trim();
                if(loginName.length() == 11 && !TextUtils.isEmpty(password)){
                    DataBaseManager.getInstance(LoginActivity.this).insertMessage(loginName,password);
                    Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                    startActivity(intent);
                }

                break;

在下拉时候调查询方法,显示到listView上

  case R.id.img_login_arrow:
                img_login_arrow.setImageResource(mIsShowList ? R.drawable.account_arrow_down : R.drawable.account_arrow_up);
                lv_login_name.setVisibility(mIsShowList ? View.GONE : View.VISIBLE);
                mIsShowList = !mIsShowList;
                if (!mIsQuery) {
                    mIsQuery = true;
                    mLoginList.addAll(DataBaseManager.getInstance(LoginActivity.this).queryAllData());
                    mAdapter.updateList(mLoginList);
                }
                break;
        }

综上,这个功能便实现完成,Android的SQLite数据库与MySQL数据库也有不同的地方,以前在一次数据库更新时候,同时更新两个字段,Android只能分开写SQL语句,MySql则可以写一起,目前本wolf也在自学MySql中,对SQL的理解也不是很透彻,欢迎各位加我QQ 396301446 ,一起讨论,本篇有不懂之处,或者不理解之处,均可评论留言或者加我QQ,一起学,同时各位大佬也带带我,有错误之处,请及时指出,有则改之,无则加勉,本Wolf先谢过了,今晚恒大必胜。

下面是下载链接的资源地址:https://download.csdn.net/download/xjz123456qqq/11632730

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值