现在的位置: 首页 > 综合 > 正文

Android数据存储之SQLite数据库存储

2013年10月06日 ⁄ 综合 ⁄ 共 3464字 ⁄ 字号 评论关闭

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()

抱歉!评论已关闭.