通常,在Android程序设计中,对于缓存数据有三种本地存放方式,分别是数据库,preference和SD卡。今天先记录一下如何完成对数据库的操作。网上有很对教程,这里自己记录一下自己常用的方法。
Android系统对数据库的操作,提供了一个SQLiteOpenHelper帮助类,使用SQLite数据库,程序需要实现一个该帮助类,该类主要提供一个数据库的接口给用户。在该帮助类中完成对于数据的基本操作,包括数据库的建立,表的建立,数据库升级。代码如下所示:
public class AccountSqliteHelper extends SQLiteOpenHelper {
public AccountSqliteHelper(Context context, String name) {
this(context, name, null, 1);
// TODO Auto-generated constructor stub
}
public AccountSqliteHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
//使用建表语句 进行建表
db.execSQL("create table if not exists accountIds(" + //这里使用的是标准SQlite建表语句。
"_id integer primary key autoincrement," +
"loginId varchar(30)," +
"loginPassword varchar(30)," +
"accountType varchar(30)," +
"userName varchar(30)," +
"userId varchar(30)," +
"userType varchar(30)," +
"userFreeFlow varchar(30)," +
"userState varchar(30)," +
"preQueryTime varchar(30)" +
")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
// if need to upgrade to edit here Do nothing here
}
}
完成帮助类的建立后,程序在使用数据库之前,首先需要通过帮助类创建数据库,然后获得一个可写或者可读的数据库的接口,然后进行操作。
也就是所对于数据库的操作,还需要创建一个操作数据库的工具类。在该类中实现我们需要的对于数据库的操作,包括增删改查等一些操作。
public class AccountDatabase {
public static final String TAG = "AccountDatabase";
private AccountSqliteHelper accountSqliteHelper;
/**
* 简历数据库 并且返回一个helper辅助操作类
* @param context
*/
public AccountDatabase(Context context) {
accountSqliteHelper = new AccountSqliteHelper(context, "accountIds.db");
}
public void add(AccountItem accountItem){
SQLiteDatabase db = accountSqliteHelper.getWritableDatabase(); //获取可写的数据库
ContentValues contentValues = new ContentValues(); //将数据封装在 ContentValues中
contentValues.put("loginId", accountItem.getLoginId());
contentValues.put("loginPassword", accountItem.getLoginPassword());
contentValues.put("accountType", String.valueOf(accountItem.getAccountType()));
contentValues.put("preQueryTime",String.valueOf(accountItem.getPreQueryTime()));
db.insert("accountIds", null, contentValues); //将数据插入到该数据库中的一个表中
}
/**
* 用于获取数据库中所有的账户信息
* @return
*/
public List<AccountItem> qurey(){
SQLiteDatabase db = accountSqliteHelper.getReadableDatabase(); //获取一个可读的数据库
List<AccountItem> accountItems = new ArrayList<AccountItem>();
Cursor cursor = db.query("accountIds", null, null, null, null, null, null); //Android封装的SQLite数据操作方法,当然可以使用标准的SQLite操作语句。
while(cursor.moveToNext()){
accountItems.add(getAccountItem(cursor));
}
return accountItems;
}
/**
* 该函数用于实现查询该账户是否存在 查询依据为 账户名
* @param item
* @return
*/
public AccountItem qurey(AccountItem item){
SQLiteDatabase db = accountSqliteHelper.getReadableDatabase();
Cursor cursor = db.query("accountIds", null, "loginId=?", new String[]{item.getLoginId()}, null, null, null); //按照条件进行查询,具体的写法可以参考数据操作语句
if(cursor.moveToNext()){
return getAccountItem(cursor);
}
return null;
}
/**
* 依据 账户的id删除掉数据库中的该账户
* */
public void delete(AccountItem item){
SQLiteDatabase db = accountSqliteHelper.getWritableDatabase();
db.delete("accountIds", "loginId=?", new String[]{item.getLoginId()});
}
/**
* 被抽取出来的函数 用于获取数据库中的一个item
* @return
*/
private AccountItem getAccountItem(Cursor cursor){
AccountItem item;
String loginId = cursor.getString(cursor.getColumnIndex("loginId"));
String loginPassword = cursor.getString(cursor.getColumnIndex("loginPassword"));
int accountType = Integer.valueOf(cursor.getString(cursor.getColumnIndex("accountType")));
/**********************************/
return item;
}
在完成了对于帮助类和工具类的创建之后,就可以在程序中进行对数据的操作。首先,实例化一个工具类。
db = new AccountDatabase(MainActivity.this); //在进行实例化是,会首先调用AccountDatabase的构造方法,在构造方法中完成对数据库帮助类的实例化,该帮助类会去系统中查找,当前应用对于的数据库是否存在,如果存在则进行下一步,如果不存在,则会创建一个用于该应用程序的数据库。
之后所有的操作都使用db进行对数据库的操作。