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");
}

}

getWritableDatabase()与getReadableDatabase()的区别:的更多相关文章

  1. getWritableDatabase()与getReadableDatabase()方法

    一旦在程序中得到了SQLiteOpenHelper对象之后,程序无须使用SQLiteDatabase的静态方法创建SQLiteDatabase实例,而且可以使用getWritableDatabase( ...

  2. Android--SQLite的使用

    1.熟悉了SQLite的一般用法之后,在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法. ...

  3. Android getReadableDatabase() 和 getWritableDatabase()

    Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例.(getReadableDa ...

  4. 安卓Android面试题大全

    56个问题都是经常用到的,可以深入研究下,也是必须掌握的开发必备知识. 安卓Android面试题汇总 搜集了一些Android面试题目,供将要面试或者正在面试的朋友参考. 1, 谈谈你对Activit ...

  5. android 数据库的创建

    主java package com.itheima.createdatabase; import android.app.Activity; import android.content.Contex ...

  6. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

  7. Android数据库

    Android数据库 什么情况下我们才用数据库做数据存储? 大量数据结构相同的数据需要存储时.Android内置了sqlite,轻量级. 创建数据库的方法 创建一个类继承SqliteOpenHelpe ...

  8. Android Training Note

    版本适配 Tip:为了能在几个Android版本中都能提供最好的特性和功能,你应该在你的app中使用Android Support Library,它能使你的app能在旧平台上使用最近的几个平台的AP ...

  9. (数据存储)Android系统存储数据

    移动设备需要存储数据,处理数据并输出处理后的信息. 主题一:存储键值对 If you have a relatively small collection of key-values that you ...

随机推荐

  1. 批量去除office超链接

    mac下: fn+shift+comman+F9 windows下:control+shift+F9

  2. 让人头疼的CSS兼容

    先说点Hack的知识(真正的高手是不用Hack的,但要成为高手必须通过Hack这一关) /* CSS属性级Hack */ color:red; /* 所有浏览器可识别*/ _color:red; /* ...

  3. EclEmma单元测试覆盖率统计插件

    EclEmma是Eclipse里的一个插件,安装简单,覆盖率显示直观.安装EclEmma.打开Eclipse,点击Help → Intall New SofaWare → Work with 输入 h ...

  4. hibernate在配置文件中配置对象关系映射文件即hbm文件路径的写法

    hbm文件如果在src下,则<mapping resource="*.hbm.xml"/> 如果在实体类包中,则<mapping resource="c ...

  5. Windows命令查看文件MD5码

    D:\>certutil -hashfile md5test.txt MD5 MD5 哈希(文件 md5test.txt): d6 f6 bb 38 b5 6b 67 8f 34 9b e4 d ...

  6. maven下载,安装与eclipse中maven配置

    1.maven下载.安装与环境变量配置 http://blog.csdn.net/jiuqiyuliang/article/details/45390313 2.Eclipse中maven的配置 ht ...

  7. jQuery(1)——了解jQuery

    jQuery 终于开始了jQuery的学习了,好开心,虽然感觉JavaScript并没有学好,尴尬.木事,咋们慢慢来.fighting [jQuery简介] jQuery是继Prototype之后又一 ...

  8. Java创建对象的4种方式?

     [Java创建对象的4种方式?] 1)通过new语句实例化一个对象 2)通过反射机制创建对象 3)通过clone()方法创建一个对象  (复制) 4)通过反序列化方式创建对象

  9. 搭建Linux3.4.2内核编辑环境

    (1)准备工作:1. 准备虚拟机2.安装工具链sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /设置环境变量:sudo vi /etc/environment ...

  10. HDU 5898 odd-even number(2016沈阳网络选拔赛 数位DP)

    定义DP[pos][pre][odd][even],pos代表当前数位,pre代表前一位的数值,odd代表到前一位连续的奇数个数,even代表到前一位连续偶数个数. odd和even肯定至少有一个为0 ...