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()的区别:的更多相关文章
- getWritableDatabase()与getReadableDatabase()方法
一旦在程序中得到了SQLiteOpenHelper对象之后,程序无须使用SQLiteDatabase的静态方法创建SQLiteDatabase实例,而且可以使用getWritableDatabase( ...
- Android--SQLite的使用
1.熟悉了SQLite的一般用法之后,在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法. ...
- Android getReadableDatabase() 和 getWritableDatabase()
Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例.(getReadableDa ...
- 安卓Android面试题大全
56个问题都是经常用到的,可以深入研究下,也是必须掌握的开发必备知识. 安卓Android面试题汇总 搜集了一些Android面试题目,供将要面试或者正在面试的朋友参考. 1, 谈谈你对Activit ...
- android 数据库的创建
主java package com.itheima.createdatabase; import android.app.Activity; import android.content.Contex ...
- Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用
前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...
- Android数据库
Android数据库 什么情况下我们才用数据库做数据存储? 大量数据结构相同的数据需要存储时.Android内置了sqlite,轻量级. 创建数据库的方法 创建一个类继承SqliteOpenHelpe ...
- Android Training Note
版本适配 Tip:为了能在几个Android版本中都能提供最好的特性和功能,你应该在你的app中使用Android Support Library,它能使你的app能在旧平台上使用最近的几个平台的AP ...
- (数据存储)Android系统存储数据
移动设备需要存储数据,处理数据并输出处理后的信息. 主题一:存储键值对 If you have a relatively small collection of key-values that you ...
随机推荐
- CSS的属性
一,可继承属性<!DOCTYPE html><html lang="en"><head> <meta charset="UTF- ...
- Codeforces Round 371 Div2 B.Passwords
原题: B. Passwords time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- python2.7学习记录之四
1.从raw_input()读取的内容永远以字符串的形式返回,把字符串和整数比较就不会得到期待的结果,必须先用int()把字符串转换为我们想要的整型 2.list增加元素 为 append() 3.d ...
- apk的重签名
1. 生成Android APK包签名证书 1). 在doc中切换到jdk的bin目录 cd C:\Program Files\Java\jdk1.6.0_18\bin 2). ...
- 股票K线图-JfreeChart版
http://blog.csdn.net/ami121/article/details/3953272 股票K线图-JfreeChart版 标签: jfreechartpropertiesapplet ...
- JS总结之二:DOM对象控制HTML
DOM对象控制HTML 1.方法 getElementsByName( ) ——获取name getElementsByTagName( ) ——获取元素 getAttribute( ) ——获取元素 ...
- JDK1.5与1.6在Override上的区别
@Override是JDK5 就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override 而JDK6 修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@Ove ...
- 深入理解typedef
首先请看看下面这两句: typedef int a[10]; typedef void (*p)(void); 如果你能一眼就看出它 ...
- Q_DISABLE_COPY
QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY() 宏放在了private区域.因此所有继承自 ...
- PCI源码学习笔记
这个是PCI的关键结构体. static const struct file_operations proc_bus_pci_operations = { .owner = THIS_MODULE, ...