Android数据存储之SQLite数据库存储
Android中每一个数据库对创建它的应用程序包套件来说都是私有的,默认情况下其他应用程序无法直接访问此私有数据库。所有的数据库文件存放在手机中的/data/data/package_name/databases路径下,以下是常用的与数据库相关的函数:
返回值
|
函数
|
备注
|
static SQLiteDatabase
|
create(SQLiteDatabase.CursorFactory factory)
|
创建一个数据库
factory:可选的数据库游标工厂类,当查询(query)被提交时,该对象会被调用来实例化一个游标。
|
static SQLiteDatabase
|
openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)
|
根据提供的模式打开一个数据库
path:打开或创建的数据库文件
factory:可选的数据库游标工厂类,当查询(query)被提交时,该对象会被调用来实例化一个游标。默认为null。
flags:控制数据库的访问模式。主要有以下几种模式:
l OPEN_READWRITE
l OPEN_READONLY
l CREATE_IF_NECESSARY
l NO_LOCALIZED_COLLATORS
|
static SQLiteDatabase
|
openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory)
|
等同于openDatabase(file.getPath(), factory, CREATE_IF_NECESSARY)
|
static SQLiteDatabase
|
openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
|
等同于openDatabase(path,factory, CREATE_IF_NECESSARY)
|
void
|
close()
|
关闭数据库
|
boolean
|
deleteDatabase(String name)
|
删除指定的数据库
name:要关闭的数据库的名字
|
示例代码如下:
//创建数据库
SQLiteDatabase mydataBase=SQLiteDatabase.create(new CursorFactory(){
//工厂类,一个可选工厂类,当查询时调用来实例化一个游标
@Override
public Cursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
// TODO Auto-generated method stub
return null;
}
});
//创建或打开数据库
SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",
MODE_PRIVATE, new CursorFactory(){
//创建新的数据库,名称myDatabase,模式MODE_PRIVATE,可选的游标工厂类
@Override
public Cursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
// TODO Auto-generated method stub
return null;
}
});
SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",MODE_PRIVATE,null);
//关闭数据库
myDataBase.close();
//删除指定名称的数据库
this.deleteDatabase(“myDatabase.db”);
|
在对数据库中的表进行相关操作时,可以使用非查询的execSQL(String sql)来执行。示例代码如下:
String CREATE_TABLE = “create table table1 (_id integer primary key autoincrement,number integer,data text)”; //创建表
myDataBase.execSQL(CREATE_TABLE);
|
Android提供了非SQL指令的对数据表进行操作的方法,以下表格是一些常用方法:
返回值
|
函数
|
备注
|
long
|
insert(String table, String nullColumnHack, ContentValues values)
|
向表中插入一条数据
table:想要插入数据的表名
nullColumnHack:SQL不允许插入空行,初始化值为空时,这一列将会被显示地赋一个null值
values:要插入的值,具体解释见表格后的解释
|
int
|
delete(String table, String whereClause, String[] whereArgs)
|
从表中删除一行数据
table:想要删除数据的表名
whereClause:可选的where子句,如果其值为null,将会删除所有的行。
whereArgs:当在whereClause中包含”?”时,如果whereArgs的值不为null,则这个数组中的值将依次替换whereClause中出现的”?”
|
Cursor
|
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
|
查询数据表
table:要查询数据的表名
columns:要返回的列的列名数组
selection:可选的where子句 ,如果其值为null,将会返回所有的行
selectionArgs:当在selection中包含”?”时,如果selectionArgs的值不为null,则这个数组中的值将依次替换selection中出现的”?”
groupBy:可选的group by子句,如果其值为null,将不会对行进行分组
having:可选的having子句,如果其值为null,将会包含所有的分组
orderBy:可选的order by子句,如果其值为null,将会使用默认的排序规则
limit:可选的limit子句,如果其值为null,将不会包含limit子句
关于返回值类型Cursor将在表格后面进行解释
|
int
|
update(String table, ContentValues values, String whereClause, String[] whereArgs)
|
修改表中的数据
table:想要修改数据的表名
values:要更新的值,具体解释见表格后的解释
whereClause:可选的where子句,如果其值为null,将会修改所有的行。
whereArgs:当在whereClause中包含”?”时,如果whereArgs的值不为null,则这个数组中的值将依次替换whereClause中出现的”?”
|
ContentValues主要是存放表中的数据段,以及其对应的值,与Hashtable一样采用名值对的形式存储,但是它存储的名值对中,名是一个String类型,值是基本数据类型。其使用示例如下:
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
args.put(KEY_BODY, body);
myDataBase.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);
|
Android采用游标对从数据库中查询出来的结果进行随机的读写访问,在查询数据库后,将结果返回给游标(即android.database.Cursor),这是查询结果的记录集,示意图如下:
|
_id
|
someNumber
|
|
1
|
8
|
|
2
|
10
|
|
3
|
2
|
Cursor类常见的方法如下:
返回值
|
函数
|
备注
|
boolean
|
move(int offset)
|
以当前位置为参考,将Cursor移动指定数目的位置(相对位置)
|
boolean
|
moveToPosition(int position)
|
将Cursor移动到指定位置(绝对位置)
|
boolean
|
moveToNext()
|
将Cursor向前移动一个位置
|
boolean
|
moveToLast()
|
将Cursor向后移动一个位置
|
boolean
|
moveToFirst()
|
将Cursor移动到第一行
|
boolean
|
isBeforeFirst()
|
返回Cursor是否指向第一项数据之前
|
boolean
|
isAfterLast()
|
返回Cursor是否指向最后一项数据之后
|
boolean
|
isClosed()
|
返回Cursor是否关闭
|
boolean
|
isFirst()
|
返回Cursor是否指向第一项数据
|
boolean
|
isLast()
|
返回Cursor是否指向最后一项数据
|
boolean
|
isNull(int columnIndex)
|
返回指定位置的值是否为null
|
int
|
getCount()
|
返回总的项目总数
|
int
|
getInt(int columnIndex)
|
返回指定列中的数据的int型表示
|
int
|
getColumnIndex(String columnName)
|
按给定的列的名字返回列的索引值,如果不存在则返回 -1
|
要创建一个Cursor(游标),必须执行一个查询,通过SQL使用rawQuery()方法或是更精心的query()方法,而不能使用execSQL(String sql)方法。以下为Cursor的使用示例:
Cursor cur=myDataBase.rawQuery("select * from test", null);
if(cur!=null){//游标不为空
//返回给定名称的列的基于0开始的index,如果该属性列不存在则返回-1
//通过它们的index来检索属性值
int numColumn=cur.getColumnIndex("someNumber");
if(cur.moveToFirst()){ //cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回true
do {
int num=cur.getInt(numColumn);//获得当前行该属性的值
/*Cursor提供了不同的方法来回索不同的数据类型,例如getInt(int index)/getString(int index)等等*/
/*做一些事情*/
} while (cur.moveToNext());
/*游标移动到下一行,如果游标已经到达结果集中的最后,即没有行可以移动时,则返回false*/
//其他可能移动的是 moveToPrevious() 和moveToFirst()方法
}
}
|
在实际使用的时候,通常都要封装一个继承SQLiteOpenHelper类的数据库操作类。SQLiteOpenHelper类是一个抽象的辅助类,主要用来生成一个数据库并对数据库的版本进行管理,在SQLiteOpenHelper类的构造方法中分别传入Context、数据库名称,CursorFactory(一般传入null,否则为默认数据库),数据库版本号(不能为负数)。在SQLiteOpenHelper中首先执行的是onCreate方法(当数据库第一次创建时),一般在这个方法里生成数据表。要注意的是,在构造函数时并没有真正创建数据库,而是在调用getWriteableDatabase()或者getReadableDatabase()方法的时候系统才会真正创建数据库,如果当时系统中不存在这个数据库,系统会自动生成一个数据库,然后返回SQLiteDatabase对象。在继承这个类的时候,要实现里面的3个方法,其中前两个方法是必须重写的。见如下表格:
返回值
|
函数
|
备注
|
public void
|
onCreate(SQLiteDatabase db)
|
在数据库第一次生成时会调用这个方法,一般我们在这个方法里生成数据表
|
public void
|
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
|
当数据库需要升级时,系统会自动调用这个方法,一般我们在这个方法里删除数据表,并建立新的数据表,并根据实际需求做其他的操作
|
public void
|
onOpen(SQLiteDatabase db)
|
这是打开数据库时的回调函数,一般不会用到
|
分享到:
相关推荐
在Android开发中,数据库处理是不可或缺的一部分,尤其是在存储和检索应用程序的数据时。SQLite是一个轻量级的、开源的关系型数据库,被广泛应用于Android系统中。本文将深入探讨Android中的SQLite数据库操作,包括...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite具有高效、可靠且易于集成的特点,使得它成为Android应用数据...
下面我们将深入讨论Android数据库应用的相关知识点。 1. SQLite数据库介绍 SQLite是一个开源的数据库系统,它被集成到Android操作系统中,无需额外安装任何软件。它的优点包括小巧、快速、可靠,以及支持SQL标准,...
总结来说,Android数据库ORM封装使得数据库操作更加简便,通过Room框架,我们可以以声明式的方式定义数据库操作,同时保持代码的清晰和可维护性。`DataBaseDemo`项目则提供了具体的实现示例,有助于你在实际项目中...
"android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...
本资源包提供了完整的Android数据库代码示例和详细的讲解资料,非常适合开发者深入学习和理解Android数据库的使用。 首先,我们来了解一下Android中主要使用的数据库系统——SQLite。SQLite是一个轻量级、嵌入式的...
下面将详细讲解如何在Android中进行数据库表结构的更新,以及如何处理旧版本程序中表的接口添加、删减字段的问题。 1. **创建SQLite数据库** - Android使用SQLite作为默认的本地数据库系统。首先,我们需要创建一...
这个“Android数据库示例源码”很可能是为了展示如何在Android平台上使用SQLite数据库进行数据操作。SQLite是一种轻量级、开源的SQL数据库,它嵌入到Android系统中,为每个应用程序提供独立的数据库。 首先,让我们...
在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。
"Android数据库查看APP.zip" 提供了一个工具,即"aSQLiteManager_数据库查看.apk",用于帮助开发者和用户方便地查看和管理Android设备上的SQLite数据库。这款应用能够协助我们深入理解Android应用的数据存储机制,对...
标题中的"an_mysql.rar_ android Mysql_Android 数据库_Android数据库_MYSQL_android"表明这是一个关于Android应用程序与MySQL数据库交互的资源包。描述指出在Android设备上实现与MySQL数据库的连接时,需要确保设备...
本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...
在Android开发中,数据库管理是不可或缺的一部分,而GreenDAO作为一款高效的对象关系映射(ORM)框架,使得在Android上处理SQLite数据库变得异常简便。本文将深入探讨GreenDAO的基本操作,帮助开发者快速理解和掌握...
本项目"android_blog.zip"显然是一个关于Android数据库实现的示例,其中包含了服务器端和客户端的完整代码,且使用了MySQL作为后端数据库。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它在服务器端...
### Android数据库开发详解 #### 一、概述 在Android应用开发过程中,数据持久化是非常重要的一个环节。Android提供了多种方式来存储数据,包括文件存储、SharedPreferences、SQLite数据库以及网络存储等。其中,...
总结,GreenDao以其高效、易用的特性,成为了Android开发中处理SQLite数据库的得力工具。通过理解并熟练运用上述知识点,开发者能更好地利用GreenDao提升开发效率,优化应用性能。在实际项目中,结合`GreenDaoDemo`...
总之,“android数据库增删改查工具”是一个实用的开发辅助组件,可以帮助开发者更高效、更安全地管理Android应用中的SQLite数据库,尤其是处理成员信息这类数据时。其全面的功能和易用性使得它成为Android开发中...
在Android开发中,数据库是用于持久化数据的重要工具,SQLite是一个轻量级的、嵌入式的、关系型数据库,它是Android系统内置的默认数据库。本文将深入探讨Android中使用SQLite进行基本操作的源码解析。 首先,我们...
本篇文章将详细探讨Android数据库ORM框架,特别是关于"ormlite"库的使用。 首先,ORMlite是一个轻量级的Java ORM库,它同样适用于Android平台。这个框架允许开发者通过简单的Java对象(POJOs)来操作数据库,而无需...
本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...