码迷,mamicode.com
首页 > 移动开发 > 详细

Android学习笔记(42):SQLite数据库

时间:2016-04-24 23:17:06      阅读:438      评论:0      收藏:0      [点我收藏+]

标签:

1SQLite数据库

先简单介绍一下SQLite数据库:

2000年由D.Richard Hipp发布。

是一款轻型、开源嵌入式关系数据库,占用资源非常低。目前用于很多嵌入式产品中,在嵌入式设备中,SQLite可能只需要几百K的内存就够了。

MysqlPostgreSQL这两款开源世界著名的数据库管理系统相比,它的处理速度更快。

Android平台下,除了可以在Android程序中操作SQLite数据库之外,还可以在命令行模式下进行各种数据库的操作,包括表的各种操作,对数据的增加、删除、修改、查询。

 

2)使用命令行操作SQLite

我们先来介绍如何使用命令行管理数据库,这里我们需要用到Android SDKplatform-tools目录下的sqlite3.exe文件,这是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口,操作数据库的语句与SQL标准大致相同。

 

使用命令行操作SQLite的步骤:

1. 运行Android模拟器或连接真机。

2. cmd输入命令adb shell,登录到设备的shell(需要取得设备的root权限,提示字符为#)。

3. 输入命令sqlite3 data/data/<package name>/databases_name打开数据库。

4. 打开数据库后,可以使用各种命令来操作数据库。

5. 对数据库的操作完毕后,输入.exit退出sqlite3,关闭数据库的访问。

 

当然我们也可以把数据库文件导出到电脑上,再用命令行对该文件进行操作。

当我们需用从文件(如一堆txt文件)中提取信息,可以写C++Java程序来创建和编辑数据库。

 

命令行操作SQLite的具体内容就不深入讲解了,了解SQL语句的话,这不会很难。

 

(3)使用代码操作SQLite数据库

为了方便使用,Android将对SQLite数据库的操作封装到两个类中。通过类实现对数据库的操作。这两个类就是SQLiteOpenHelperSQLiteDatabase

 

1. SQLiteOpenHelper

帮助类,用于创建数据库和数据库版本管理。使用该类,必须创建一个子类并实现下列方法:onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase, int, int)

onCreate(SQLiteDatabase db):用于初次使用软件时生成数据库表。只在生成数据库时调用。

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):用于升级软件时更新数据库。创建SQLiteOpenHelper对象时传入的version参数表示数据库的版本号,再次创建SQLiteOpenHelper时如果版本号高于旧的版本号,就会触发这个方法。

 

SQLiteOpenHelper用于打开和创建数据库的方法如下:

SQLiteDatabase getReadableDatabase():以读写的方式打开SQLiteDatabase对象。磁盘空间满时以只读的方式打开。

SQLiteDatabase getWritableDatabase():以写的方式打开SQLiteDatabase对象。磁盘空间满时会出错。

void close():关闭所有打开的SQLiteDatabase对象。

 

2. SQLiteDatabase

SQLiteDatabase自身提供了一些静态方法来打开和创建数据库,但并不是推荐使用的:

static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags):打开path文件所代表的数据库。

static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory):打开path文件所代表的数据库,如果不存在就创建。

static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory)

打开file文件所代表的数据库,如果不存在就创建。

 

获取了SQLiteDatabase对象后,供我们对数据库进行操作的常用方法:

 

事务处理:

事务处理可以帮助我们提高大批量处理数据的效率。

使用SQLiteDatabasebeginTransaction()方法可以开启一个事务,程序执行到endTransaction()方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful()方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful()方法则回滚事务。

 

void beginTransaction():开始事务。

void endTransaction():结束事务。

boolean inTransaction():判断是否处于事务中。

 

看下面这个例子:

public void payment() {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
db.beginTransaction();//开始事务
try {
db.execSQL("update person set amount=amount-10 where personid=2");
db.execSQL("update person set amount=amount+10 where personid=5");
db.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。
} catch (SQLException e) {
} finally {
db.endTransaction();
}
// 结束事务,有两种情况:commit,rollback,
// 事务的提交或回滚是由事务的标志决定的,如果事务的标志为true就会提交,否则回滚,默认情况下事务的标志为false
}


 

int delete(String table, String whereClause, String[] whereArgs):删除指定表中的指定数据。table表示想删除的表名,whereClause表示满足该子句的记录将被删除,whereArgswhereClause传入参数。

 

long insert(String table, String nullColumnHack, ContentValues values):向指定表中插入数据。table表示表名,nullColumnHack表示插入null的列的列名,value表示一行记录的数据。

 

int update(String table, ContentValues values, String whereClause, String[] whereArgs):更新指定表中的指定数据。table表示表名,values表示想更新的数据,whereClause表示满足该子句的记录会被更新,whereArgswhereClause子句传入参数。

 

void execSQL(String sql):执行SQL语句。

void execSQL(String sql, Object[] bindArgs):执行带占位符的SQL语句。

 

Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy):对指定表执行查询。columns表示要查询出来的列名,selection查询条件子句,selectionArgsselection传入参数,groupBy控制分组,having对分组进行过滤,orderBy对记录进行排序。

Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit):对指定表执行查询。Limit参数指定最多查询几条记录。

Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit):对指定表执行查询,第一个参数控制是否去除重复值。

Cursor rawQuery(String sql, String[] selectionArgs):执行带占位符的SQL查询。

 

 

查询方法返回的都是一个Cursor对象,我们可以把Cursor看做一个查询结果的集合。Cursor提供了如下的方法供我们移动查询结果的记录指针。

boolean move(int offset):将记录指针向上或向下移动指定的行数,offset正数为向下移动。

boolean moveToFirst():将记录指针移动到第一行。

boolean moveToLast():将记录指针移动到最后一行。

boolean moveToNext():将记录指针移动到下一行。

boolean moveToPosition(int position):将记录指针移动到指定的行。

boolean moveToPrevious():将记录指针移动到上一行。

上述方法,移动成功返回true

 

使用SQLiteDatabase操作数据库的步骤可以总结如下:

<1> 获取SQLiteDatabase对象。

<2> 调用特定方法操作数据库。

<3> 关闭SQLiteDatabase,回收资源。

 

(4)可视化工具

SQLiteSpy就挺好的。

Android学习笔记(42):SQLite数据库

标签:

原文地址:http://blog.csdn.net/qq_18738333/article/details/51235659

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!