java 安卓数据库,Android中数据持久化方案之一:javabean和Dao模式的数据库操作

数据库是Android 数据持久化操作的解决方案之一。

以保存User信息为例,需要用到3个类:

UserBean

JavaBean是最标准的POJO,里面有一个无参构造方法、纯粹的get/set方法、实现Serializable接口可序列化,没有业务逻辑。

UserDB

即SQL语句操作

UserDBDao

DAO提供了和数据库打交互的方法,这里通常写获取连接、关闭连接、增删改查的方法。

总结:

user信息实际上是一张user表。

javabean是一个包含属性和表中字段完全对应的类。并在该类中提供set和get方法来设置并获得该类中的属性。一个javabean类与一个数据库中的表相对应,也就是说,有多少表,就应该有多少javabean类。而实例化的javabean对象则代表一个表中的一行数据。

Dao实现类通过连接数据库进行数据库操作。一个Dao实现类对应一个表,如UserDBDao类对应user表,该类中将定义对该表的所有的操作。

例子:

public class UserBean{

private String name;

private String pass;

private String userID;

private boolean infoCompleted;

public String getName(){

return name;

}

public void setName(String name){

this.name = name;

}

public String getPass(){

return pass;

}

public void setPass(String pass){

this.pass = pass;

}

public String getUserID(){

return userID;

}

public void setUserID(String userID){

this.userID = userID;

}

public boolean isInfoCompleted(){

return infoCompleted;

}

public void setInfoCompleted(boolean infoCompleted){

this.infoCompleted = infoCompleted;

}

}

public class UserDB extends SQLiteOpenHelper{

private static final String DB_NAME = "test";

private static final int version = 1;

public String TABLE_NAME_USER = "users";

private String CREATE_TABLE_USER = "create table if not exists "

+ TABLE_NAME_USER

+ "(_id integer primary key autoincrement," +

"userid varchar(30),name varchar(30),pass varchar(30), is_complete int);";

public UserDB(Context context) {

super(context, DB_NAME, null, version);

}

@Override

public void onCreate(SQLiteDatabase db){

db.execSQL(CREATE_TABLE_USER);

}

@Override

public void onOpen(SQLiteDatabase db){

db.execSQL(CREATE_TABLE_USER);

}

@Override

public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2){

}

}

public class UserDBDao{

private UserDB helper;

public UserDBDao(Context context) {

helper = new UserDB(context);

}

/**

* 添加用户

*/

public long add(UserBean user){

if (isUserExist(user.getUserID())) { return -1; }

SQLiteDatabase db = helper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("userid", user.getUserID());

values.put("name", user.getName());

values.put("pass", user.getPass());

values.put("is_complete", user.isInfoCompleted()?1:0);

long rowID = db.insert(helper.TABLE_NAME_USER, null, values);

db.close();

return rowID;

}

/**

* 查询某个用户是否存在

*/

public boolean isUserExist(String userid){

boolean result = false;

SQLiteDatabase db = helper.getWritableDatabase();

Cursor cursor = db.query(helper.TABLE_NAME_USER, null, "userid=?",

new String[] { userid }, null, null, null);

if (cursor.moveToNext()){

result = true;

}

cursor.close();

db.close();

return result;

}

/**

* 查询某个用户

*/

public UserBean getUser(String userid){

if (!CommonUtil.isNotEmpty(userid)) { return null; }

UserBean bean = new UserBean();

SQLiteDatabase db = helper.getReadableDatabase();

Cursor cursor = db.query(helper.TABLE_NAME_USER, new String[] { "name", "pass", "is_complete" }, "userid=?", new String[] { userid }, null, null, null);

if (cursor.moveToNext()){

bean.setName(cursor.getString(0));

bean.setPass(cursor.getString(1));

bean.setInfoCompleted(cursor.getInt(2) == 0);

}

cursor.close();

db.close();

return bean;

}

/**

* 返回所有的用户信息

*/

public List findAllUser(){

List allUsers = new ArrayList();

SQLiteDatabase db = helper.getReadableDatabase();

Cursor cursor = db.query(helper.TABLE_NAME_USER, new String[] { "userid", "name", "pass", "is_complete" }, null, null, null, null, null);

while (cursor.moveToNext()){

UserBean bean = new UserBean();

bean.setUserID(cursor.getString(0));

bean.setName(cursor.getString(1));

bean.setPass(cursor.getString(2));

bean.setInfoCompleted(cursor.getInt(3) == 0);

allUsers.add(bean);

}

cursor.close();

db.close();

return allUsers;

}

/**

* 删除一条用户的记录

*/

public boolean delete(String userId){

SQLiteDatabase db = helper.getWritableDatabase();

int result = db.delete(helper.TABLE_NAME_USER, "userid=?", new String[] { userId });

db.close();

if (result > 0){

return true;

}

else{

return false;

}

}

/**

* 修改密码

*/

public boolean updatePass(String userid, String pass){

SQLiteDatabase db = helper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("pass", pass);

int result = db.update(helper.TABLE_NAME_USER, values, "userid=?", new String[] { userid });

db.close();

if (result > 0){

return true;

}

else{

return false;

}

}

}

以上。

UserDBDao提供了对外操作数据的方法,外部只需要通过UserDBDao对象来对数据进行存取及其他操作即可。

如果你以前习惯用sharedpreferences来进行数据持久化操作的话,UserDBDao在某些方面也可以等价于其功能。

与sharedpreferences不同的是,sharedpreferences常用于轻量级的、单个类型的数据存取,而DBDao则更倾向于整张表结构数据的存取操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值