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. C++ 类的继承、虚拟继承、隐藏、占用空间

    主函数: #include <iostream> #include "test.h" #include "testfuc.h" using name ...

  2. NOIP2015普及组第四题推销员

    好久没有写博客了,今天再写一篇.还是先看题: 试题描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家 ...

  3. jquery效果,多个div,点击任何一个div,那么这个div会切换文字,变换背景颜色,再次点击其他的div ,这个div会发生刚才的变化,之前点击的div的颜色会变回来

    首先css样式: /*原来的背景色*/ .bg { background:'red' } /*需要切换的背景色*/ .bg_click { background:'green' } JS: $('di ...

  4. MapReduce初级案例

    1.数据去重  "数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就 ...

  5. spark开发

    1. 主要参考资料http://spark.incubator.apache.org/docs/latest/scala-programming-guide.htmlhttp://www.eecs.b ...

  6. glusterfs——volume管理

    Q: 常用的命令有哪些? 创建volume: gluster volume create NAME stripe SCOUNT replica RCOUNT transport TYPE  BRICK ...

  7. java中static关键字解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  8. css在网页中划线

    在行边距上的线可以通过 1 div,表格等的border属性实现 2 <hr/>实现 3 通过背景图片实现 4 页面内写入横线图片 通过相对定位实现 5 通过css伪类实现 <sty ...

  9. MT4 做指标模版

    //+------------------------------------------------------------------+ //| guo.mq4 | //| Copyright 2 ...

  10. Box of Bricks

    Box of Bricks Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...