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

}

getWritableDatabase()与getReadableDatabase()的区别:,布布扣,bubuko.com

时间: 2024-10-20 23:03:21

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

Android getWritableDatabase()和getReadableDatabase区别

Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例. 其中getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库.如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象. getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁

Android使用getWritableDatabase()和getReadableDatabase()

数据库SQLite介绍 Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例. getReadableDatabase()方法中会调用getWritableDatabase()方法 其中 getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错. g

getWritableDatabase()与getReadableDatabase()方法

一旦在程序中得到了SQLiteOpenHelper对象之后,程序无须使用SQLiteDatabase的静态方法创建SQLiteDatabase实例,而且可以使用getWritableDatabase()或getReadableDatabase()方法来获取一个用于操作数据库的SQLiteDatabase实例. getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错.

SQLite学习(继续更新)

SQLite是一款轻量级数据库,集成于android中,下面从分享一下自己学习的. 在查阅资料时有一些好的说明就直接用了: 基本的curd语句 下面SQL语句获取5条记录,跳过前面3条记录 select * from Account limit 5 offset 3 或者 select * from Account limit 3,5 插入语句:insert into 表名(字段列表) values(值列表).如: insert into person(name, age) values('at

Android SQLite 的介绍和使用(二)

上一节简单介绍了一下SQLite,这一节我们开始SQLite在Android中的应用. Android提供了一个数据库的帮助类 SQLiteOpenHelper,用于管理数据库的创建和版本管理.我们可以继承这个类,实现它的 onCreate和 onUpgrade方法.我们可以在这里设置数据库的版本,数据库名称,创建数据库表等.下面看代码: public class DBHelper extends SQLiteOpenHelper { //数据库的版本号必须要大于1 public final s

Android--SQLite的使用

1.熟悉了SQLite的一般用法之后,在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法.例如:我们创建一个DBHelper类,它继承SQLiteOpenHelper,作为维护和管理数据库的基类:然后创建一个DBManager类,它建立在DBHelper之上,封装一系列业务方法(CRUD等). 2.getWritableDatabase()和getReadableDatabase()的区

Android getReadableDatabase() 和 getWritableDatabase()

Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例.(getReadableDatabase()方法中会调用getWritableDatabase()方法) 其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错. getReadableDa

android 数据库的创建

主java package com.itheima.createdatabase; import android.app.Activity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; public class MainActivity extends Activity { private Context mContext; @Ov

(一)SQLite数据库

1.SQLite数据库简介 SQL数据库与我们之前学习的mysql数据库,oracle数据基本上都是相同的,其最大的特点是:我们可以将任意类型的数据保存到任意类型的字段中,而不用考虑数据库中字段的类型是什么(但是有一种情况时例外的,如果我们将某个字段声明为整形的主键,那么其只可以保存最大长度为64位的整数,否则会报错),例如我们可以在整型的字段中保存字符串.再假设,我们将字符串的最大长度设置为20,那么在oracle或者mysql中,我们存储的字符串是不可以超过20个字符的,但是对于sqlLit