Android数据库:存取数据的终极指南 (android 下数据库)
Android平台作为如今移动设备应用开发最重要的平台之一,其中的数据库应用也变得日益重要。对于那些对于数据库的存取处理不是很理解的开发人员来说,要在Android应用中实现数据存取也可称得上是一场灾难。不同版本的Android平台都有着不同的数据库API,还有着不少的坑点。本文将通过介绍在Android平台下的SQLite数据库的使用方法、效率的优化策略以及一些更佳实践,以帮助开发人员更好地在Android平台下实现数据库的存取与处理。
一、Android平台下的SQLite数据库的使用方法
在Android平台下,目前内嵌的数据库系统为SQLite。SQLite是一个轻量级的关系型数据库,是Android系统存储数据的标配,其具有占用资源低、无需服务器、灵活处理数据等特点。虽然SQLite作为一个关系型数据库,但其使用不需要编写一百行以上的代码,而且使用不受语言限制,不管是Java、C++、C#还是其它编程语言都可以轻松使用上。
以下是一个Android应用中SQLite数据库实现相关的基本步骤:
1.定义数据库类。SQLiteOpenHelper类是SQLite的帮助工具。定义数据库类需要继承SQLiteOpenHelper。
2.定义数据表,包括表名、列名和数据类型等。
3.实现数据库的打开、关闭功能,以及基本的增、删、改、查功能。
下面以一个简单的例子为例来讲解SQLite数据的存储:
1.定义数据库类
SQLiteOpenHelper是Android SDK中以SQLite为基础实现的数据存储辅助类,它封装了SQLiteDatabase对象的创建与升级之间的操作。SQLiteOpenHelper的使用需要继承该类,然后用super()方法调用基类构造器以创建一个可用的SQLiteOpenHelper对象。
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = “create table Book(“
+ “id integer primary key autoincrement,”
+ “cursor text,”
+ “price real,”
+ “pages integer,”
+ “name text)”;
// 构造函数,传入context、数据库名、游标工厂、版本号。
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
// 创建数据库回调事件
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
}
// 升级数据库回调事件
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.定义数据表
数据表是用来存放与应用相关的数据的,区别于SQL语法中的数据表,SQLite数据表中是没有指定数据类型的,它默认会自动检测数据类型,而且该性质使得开发人员后期内容更新时可以无需修改数据库中的存储结构。
CREATE_BOOK的建表语句如下:
public static final String CREATE_BOOK = “create table Book(“
+ “id integer primary key autoincrement,”
+ “cursor text,” // 书名
+ “price real,” // 价格
+ “pages integer,” // 页数
+ “name text)”;
3.实现数据库的打开、关闭功能,以及基本的增、删、改、查功能。
插入数据的实现:
// 向目标表插入数据
public void insert() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// 开始组装之一条数据
values.put(“name”, “之一行代码”);
values.put(“cursor”, “郭霖”);
values.put(“pages”, 500);
values.put(“price”, 90.8);
db.insert(“Book”, null, values); // 插入数据
// 开始组装第二条数据
values.clear();
values.put(“name”, “安卓群英传”);
values.put(“cursor”, “任玉刚”);
values.put(“pages”, 600);
values.put(“price”, 100);
db.insert(“Book”, null, values);// 插入数据
// 关闭数据库
db.close();
}
删除数据:
// 删除一定价格以上的数据
public void delete() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
db.delete(“Book”, “price > ?”, new String[]{“100”});
db.close();
}
更新数据:
// 更新书名为”one day”的数据
public void update() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “one day”);
db.update(“Book”, values, “name = ?”, new String[]{“之一行代码”});
db.close();
}
查询数据:
// 查询所有数据
public void query() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
// 查询Book表的所有数据
Cursor cursor = db.query(“Book”, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
// 遍历Cursor对象,取出数据并打印
String name = cursor.getString(cursor.getColumnIndex(“name”));
String author = cursor.getString(cursor.getColumnIndex(“cursor”));
int pages = cursor.getInt(cursor.getColumnIndex(“pages”));
double price = cursor.getDouble(cursor.getColumnIndex(“price”));
Log.d(“MnActivity”, “book name is ” + name + ” author is ” + author
+ ” pages is ” + pages + ” price is ” + price);
} while (cursor.moveToNext());
}
cursor.close();
}
二、效率的优化策略
在数据库操作时,我们不仅需要保证数据的准确性、完整性,还需要考虑到效率问题。如何快速高效地操作数据库呢?以下是几个优化策略:
1.合理的SQL语句设计。SQL语句的设计是否正确,直接影响该操作的效率的高低。因此我们需要针对不同的数据库操作,设计出恰当的SQL语句,以减少无用的数据查询和降低I/O操作负荷。
2.使用事务。在执行多个Sqlite数据操作语句时,可以通过开启事务来减少磁盘IO操作、提升操作性能。事务操作是在数据库存储系统中大量操作数据的优秀例子,它对于大数据量的数据操作有着很大的作用。开发者在进行大数据量的操作时,可以使用事务,将数据起来,然后一次提交,这样可以有效的运用资源,提高数据操作效率。
3.对数据量较大的字段建立索引。索引是一种特定顺序排列的数据结构,它可以快速定位到表中的特定行。对数据量比较大的字段建立索引可以极大的提高数据库的查询速度。但是建索引也会带来一定的资源和性能损耗,索引会占用一定的空间,并且当数据量增加时,更新查询的代价也会变得越来越大。
三、更佳实践
针对Android平台下的数据库操作更佳实践如下:
1.不在UI线程中进行数据库操作。所有的数据库操作都需要在子线程中进行。因为如果在UI线程中进行,这样会导致主线程被堵塞,从而造成UI卡顿,影响用户的交互体验。
2.不要忘记关闭数据库。在操作完成后及时关闭数据库,这样可以释放相关资源,避免出现数据泄漏。
3.关于多线程操作。在多线程操作时,每个线程都需要创建自己的单例SQLiteOpenHelper实例对象,这样才能保证在多线程环境下数据库的操作是安全的。如果多个线程在同一实例中操作数据库,会在并发时发生错误。
通过本文的介绍,相信大家能够更好的了解到在Android平台下的SQLite数据库操作的方法与技巧。在日常的应用开发中,良好的数据库操作习惯应该是我们很好的应用之一。当要处理大量的数据时,我们需要注意的是优化策略,使用一些高效的语句,避免频繁出现sql查询动作,并开启事务操作加速数据库数据插入的动作。最后严格按照更佳实践操作,可以让我们的程序更加健壮,性能得到更好的提升。