现在的位置: 首页 > 综合 > 正文

Android初学之数据库的操作

2017年12月07日 ⁄ 综合 ⁄ 共 4194字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.