通常,在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进行对数据库的操作。