`

【Android】数据库处理

 
阅读更多
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 数据库处理及操作

    在Android开发中,数据库处理是不可或缺的一部分,尤其是在存储和检索应用程序的数据时。SQLite是一个轻量级的、开源的关系型数据库,被广泛应用于Android系统中。本文将深入探讨Android中的SQLite数据库操作,包括...

    Android数据库SQLite详解

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite具有高效、可靠且易于集成的特点,使得它成为Android应用数据...

    android数据库应用实例

    下面我们将深入讨论Android数据库应用的相关知识点。 1. SQLite数据库介绍 SQLite是一个开源的数据库系统,它被集成到Android操作系统中,无需额外安装任何软件。它的优点包括小巧、快速、可靠,以及支持SQL标准,...

    Android数据库ORM封装

    总结来说,Android数据库ORM封装使得数据库操作更加简便,通过Room框架,我们可以以声明式的方式定义数据库操作,同时保持代码的清晰和可维护性。`DataBaseDemo`项目则提供了具体的实现示例,有助于你在实际项目中...

    android数据库操作封装

    "android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...

    android 数据库代码和资料

    本资源包提供了完整的Android数据库代码示例和详细的讲解资料,非常适合开发者深入学习和理解Android数据库的使用。 首先,我们来了解一下Android中主要使用的数据库系统——SQLite。SQLite是一个轻量级、嵌入式的...

    android 数据库表结构更新步骤

    下面将详细讲解如何在Android中进行数据库表结构的更新,以及如何处理旧版本程序中表的接口添加、删减字段的问题。 1. **创建SQLite数据库** - Android使用SQLite作为默认的本地数据库系统。首先,我们需要创建一...

    Android数据库示例源码

    这个“Android数据库示例源码”很可能是为了展示如何在Android平台上使用SQLite数据库进行数据操作。SQLite是一种轻量级、开源的SQL数据库,它嵌入到Android系统中,为每个应用程序提供独立的数据库。 首先,让我们...

    Android数据库完美框架和示例

    在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。

    Android数据库查看APP.zip

    "Android数据库查看APP.zip" 提供了一个工具,即"aSQLiteManager_数据库查看.apk",用于帮助开发者和用户方便地查看和管理Android设备上的SQLite数据库。这款应用能够协助我们深入理解Android应用的数据存储机制,对...

    an_mysql.rar_ android Mysql_Android 数据库_Android数据库_MYSQL_android

    标题中的"an_mysql.rar_ android Mysql_Android 数据库_Android数据库_MYSQL_android"表明这是一个关于Android应用程序与MySQL数据库交互的资源包。描述指出在Android设备上实现与MySQL数据库的连接时,需要确保设备...

    你想要Android数据库操作精华(安全、并发、单例等)

    本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...

    Android数据库框架GreenDAO的基本操作

    在Android开发中,数据库管理是不可或缺的一部分,而GreenDAO作为一款高效的对象关系映射(ORM)框架,使得在Android上处理SQLite数据库变得异常简便。本文将深入探讨GreenDAO的基本操作,帮助开发者快速理解和掌握...

    android_blog.zip_Android 数据库_Android数据库_android_mysql客户端_服务器 数据库

    本项目"android_blog.zip"显然是一个关于Android数据库实现的示例,其中包含了服务器端和客户端的完整代码,且使用了MySQL作为后端数据库。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它在服务器端...

    android数据库开发

    ### Android数据库开发详解 #### 一、概述 在Android应用开发过程中,数据持久化是非常重要的一个环节。Android提供了多种方式来存储数据,包括文件存储、SharedPreferences、SQLite数据库以及网络存储等。其中,...

    Android GreenDao 数据库框架的使用

    总结,GreenDao以其高效、易用的特性,成为了Android开发中处理SQLite数据库的得力工具。通过理解并熟练运用上述知识点,开发者能更好地利用GreenDao提升开发效率,优化应用性能。在实际项目中,结合`GreenDaoDemo`...

    android数据库增删改查工具

    总之,“android数据库增删改查工具”是一个实用的开发辅助组件,可以帮助开发者更高效、更安全地管理Android应用中的SQLite数据库,尤其是处理成员信息这类数据时。其全面的功能和易用性使得它成为Android开发中...

    Android数据库基本操作源码

    在Android开发中,数据库是用于持久化数据的重要工具,SQLite是一个轻量级的、嵌入式的、关系型数据库,它是Android系统内置的默认数据库。本文将深入探讨Android中使用SQLite进行基本操作的源码解析。 首先,我们...

    android 数据库orm框架依赖库

    本篇文章将详细探讨Android数据库ORM框架,特别是关于"ormlite"库的使用。 首先,ORMlite是一个轻量级的Java ORM库,它同样适用于Android平台。这个框架允许开发者通过简单的Java对象(POJOs)来操作数据库,而无需...

    android数据库操作Demo

    本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...

Global site tag (gtag.js) - Google Analytics