• getWritableDatabase()与getReadableDatabase()的区别:


    getWritableDatabase取得的实例不是仅仅具有写的功能,而是同时具有的功能同样的

    getReadableDatabase取得的实例也是具对数据库进行读和写的功能。

    两者的区别在于

    getWritableDatabase取得的实例是以读写的方式打开数据库,如果打开的数据库磁盘满了,此时只能读不能写,此时调用了getWritableDatabase的实例,那么将会发生错误(异常)

    getReadableDatabase取得的实例是先调用getWritableDatabase以读写的方式打开数据库,如果数据库的磁盘满了,此时返回打开失败,继而用getReadableDatabase的实例以只读的方式去打开数据库

    具体使用:

    /** 空间不够存储的时候设为只读
    * @throws SQLiteException
    */
    public void open() throws SQLiteException
    {
    dbOpenHelper = new DBOpenHelper(xContext, DB_NAME, null,DB_VERSION);
    try
    {
    db = dbOpenHelper.getWritableDatabase();
    }
    catch (SQLiteException e)
    {
    db = dbOpenHelper.getReadableDatabase();
    }
    }

    /**
    * 静态Helper类,用于建立、更新和打开数据库
    */
    private static class DBOpenHelper extends SQLiteOpenHelper
    {
    /*
    * 手动创建表的SQL命令
    CREATE TABLE peopleinfo
    (_id integer primary key autoincrement,
    name text not null,
    age integer,
    height float);*/
    private static final String DB_CREATE=
    "CREATE TABLE "+DB_TABLE
    +" ("+KEY_ID+" integer primary key autoincrement, "
    +KEY_NAME+" text not null, "
    +KEY_AGE+" integer,"+
    KEY_HEIGHT+" float);";
    public DBOpenHelper(Context context, String name,
    CursorFactory factory, int version)
    {
    super(context, name, factory, version);
    }

    /*
    * 函数在数据库第一次建立时被调用,
    * 一般用来用来创建数据库中的表,并做适当的初始化工作
    */
    @Override
    public void onCreate(SQLiteDatabase db)
    {
    db.execSQL(DB_CREATE);
    Log.i(DB_ACTION, "onCreate");
    }

    /*
    * SQL命令。onUpgrade()函数在数据库需要升级时被调用,
    * 通过调用SQLiteDatabase对象的execSQL()方法,
    * 执行创建表的一般用来删除旧的数据库表,并将数据转移到新版本的数据库表中
    */
    @Override
    public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion)
    {

    //为了简单起见,并没有做任何的的数据转移,而仅仅删除原有的表后建立新的数据库表
    _db.execSQL("DROP TABLE IF EXISTS "+DB_TABLE);
    onCreate(_db);
    Log.i(DB_ACTION, "Upgrade");
    }

    }

  • 相关阅读:
    8小时外你做什么?下班后的生活决定你的竞争力
    8个月,一位年轻总裁的坠落:值得所有职业经理人深思
    陈紫熹(帮别人名字作诗)
    年轻人创业尤其要注意的五个基本法则
    解密联想20年的45条法则
    小本创业】30条生意妙经及七大关键感悟
    新时代白领必备的两大“新”能力,你有吗?
    秘笈:送给创业者的19条忠告
    C#计算两个日期之间的差
    tnsnames.ora是什么东东?
  • 原文地址:https://www.cnblogs.com/dantefung/p/3873156.html
Copyright © 2020-2023  润新知