getReadableDatabase 和 getWritableDatabase的区别
(1)getWritableDatabase()方法以读写方式打开数据库。
一旦数据库的磁盘空间满了,数据库就只能读而不能写,此时用getWritableDatabase()打开数据库就会出错。 (2)getReadableDatabase()方法先调用getWritableDatabase()先以读写方式打开数据库。
倘若使用如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。 一般避免报错都是用getReadableDatabase()方法 包结构一般这样:
MySqliteOpenHelper类:
public class MySqliteOpenHelper extends SQLiteOpenHelper { public MySqliteOpenHelper(Context context) { //context :上下文 , name:数据库文件的名称 factory:用来创建cursor对象,默认为null
//version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能将
super(context, "info.db", null,1);
} //oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql语句;SQLiteDatabase db可以用来执行sql语句
@Override
public void onCreate(SQLiteDatabase db) {
//通过SQLiteDatabase执行一个创建表的sql语句
db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(11))");
} //onUpgrade数据库版本号发生改变时才会执行; 特别适合做表结构的修改
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//添加一个phone1字段
// db.execSQL("alter table info add phone1 varchar(11)");
} }
InfoDao类(对info表进行增、删、改、查):
public class InfoDao { private MySqliteOpenHelper mySqliteOpenHelper;
public InfoDao(Context context){
//创建一个帮助类对象
mySqliteOpenHelper = new MySqliteOpenHelper(context);
} public boolean add(InfoBean bean){ //执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); ContentValues values = new ContentValues();//是用map封装的对象,用来存放值
values.put("name", bean.name);
values.put("phone", bean.phone); //table: 表名 , nullColumnHack:可以为空,标示添加一个空行, values:数据一行的值 , 返回值:代表添加这个新行的Id ,-1代表添加失败
long result = db.insert("info", null, values);//底层是在拼装sql语句 //关闭数据库对象
db.close(); if(result != -1){//-1代表添加失败
return true;
}else{
return false;
}
} public int del(String name){ //执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行
int result = db.delete("info", "name = ?", new String[]{name});
//关闭数据库对象
db.close(); return result; }
public int update(InfoBean bean){ //执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues();//是用map封装的对象,用来存放值
values.put("phone", bean.phone);
//table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行
int result = db.update("info", values, "name = ?", new String[]{bean.name});
//关闭数据库对象
db.close();
return result;
}
public void query(String name){ //执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //table:表名, columns:查询的列名,如果null代表查询所有列; selection:查询条件, selectionArgs:条件占位符的参数值,
//groupBy:按什么字段分组, having:分组的条件, orderBy:按什么字段排序
Cursor cursor = db.query("info", new String[]{"_id","name","phone"}, "name = ?", new String[]{name}, null, null, "_id desc");
//解析Cursor中的数据
if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据 //循环遍历结果集,获取每一行的内容
while(cursor.moveToNext()){//条件,游标能否定位到下一行
//获取数据
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String phone = cursor.getString(2);
System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone);
}
cursor.close();//关闭结果集 }
//关闭数据库对象
db.close(); }
}
getReadableDatabase 和 getWritableDatabase的区别的更多相关文章
- Android getReadableDatabase() 和 getWritableDatabase()
Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例.(getReadableDa ...
- Android基础总结
原文 http://blog.csdn.net/heimady/article/details/10363995 1. 前言 1.1. 什么是 3G . 4G Ÿ 第三代移动通信技术(3rd - G ...
- Android基础总结(精华完整版)
1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术( ...
- Android之SqlLite数据库使用
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库—SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...
- [JIT_APP]Android SQLite简介
SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目(Mozilla, PHP, Pyt ...
- Android数据库
Android数据库 什么情况下我们才用数据库做数据存储? 大量数据结构相同的数据需要存储时.Android内置了sqlite,轻量级. 创建数据库的方法 创建一个类继承SqliteOpenHelpe ...
- SQLiteOpenHelper与SQLiteDatabase的使用
1. 数据类型 与其它数据库不同,SQLite的数据类型很简单,只有NULL(空类型).INTEGER(整型).REAL(浮点型).TEXT(字符串型).BLOB(二进制型). SQLite为动态数据 ...
- Android学习--持久化(三) SQLite & LitePal
SQLite & LitePal 自己做为一个iOS开发,看到安卓这一块的时候,那中浓烈的熟悉味道更加强烈,SQLite这种轻量级的关系型数据库的使用在移动端相差不多,iOS有FMDB,And ...
- Android 游标
静下心来,学一下Android的数据库连接. 1.直接从getReadableDatabase()与getWritableDatabase()入手. --getReadableDatabase( ...
随机推荐
- 在hadoop 的任务中设置 map数量
试验了一下: 调整mapred-site.xml中mapred.min.split.size的值可以改变map的数量 首先设置了hdfs-site.xml中的dfs.block.size为20M,测试 ...
- Idea1.5使用Maven搭建Apache Spark1.6源码阅读环境
1.插件安装,在Idea界面依次:File->settings->plugins,安装Maven 2.下载Spark1.6.2源码,这个在GitHub上下载,具体流程自己百度,很简单 3. ...
- SQLite学习网址
http://www.runoob.com/sqlite/sqlite-data-types.html
- 转:LoadRunner响应时间与用户体验时间不一致问题的深入分析
在新一代一期项目非功能测试过程中,我们发现了LoadRunner测试响应时间与客户端实际用户体验时间不一致的现象.例如员工渠道上线后,客户体验时间远远超过了LoadRunner测试响应时间.本文针对这 ...
- openstack私有云布署实践【16.1 CentOS7.1 只有根分区镜像制作】
之所以要只有根分区镜像,是因为在创建VM或者调整云主机的硬盘大小时,它能自动扩容.无需人工介入 在原来的物理机10.40.41.1的CentOS 6.7上制作镜像.(当然如果你的制作镜像的宿主机是 ...
- 谷歌Dremel即时数据分析解决方案
Hadoop技术已经无处不在.不管是好是坏,Hadoop已经成为大数据的代名词.短短几年间,Hadoop从一种边缘技术成为事实上的标准.看来,不仅现在Hadoop是企业大数据的标准,而且在未来,它的地 ...
- L2-002. 链表去重
L2-002. 链表去重 题目链接:https://www.patest.cn/contests/gplt/L2-002 这题因为结点地址只有四位数,所以可以直接开一个10000的数组模拟内存就好了. ...
- iOS开发打电话的功能
1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 NSMutableString * phoneStr=[[NSMutableString alloc] init ...
- sql表命名规范
tb_new_Count 新闻内容表:首先表加tb_,如果是视图则加V_存储过程加_p. 下划线后面要大写. 切记.(萌萌的国庆要加油)
- Apache Zeppelin
介绍 用于做数据分析和可视化 一.二进制安装 1)下载二进制包 wget http://mirrors.tuna.tsinghua.edu.cn/apache/incubator/zeppelin/0 ...