前文:提到存储,很多都知道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