Android开发:SQLite数据库中的数据操作详解

0 下载量 141 浏览量 更新于2024-08-29 收藏 248KB PDF 举报
"这篇Android学习笔记主要讲解如何将数据保存到SQL数据库中,包括使用SQLHelper创建数据库以及数据的增删查改操作。" 在Android应用开发中,存储数据的方式多种多样,而SQL数据库是一个常用的选择,尤其适用于处理结构化、需要高效检索的数据。SQLite是Android系统内置的关系型数据库,它轻量级且易于使用,能满足大多数应用的需求。本篇笔记将通过一个联系人管理的示例来深入理解这一过程。 首先,我们来看如何使用SQLHelper创建数据库。SQLHelper是一个自定义的辅助类,通常继承自SQLiteOpenHelper。这个类的主要职责是创建和升级数据库。以下是一个简单的SQLHelper类的实现: ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "ContactDB"; private static final int DATABASE_VERSION = 1; // 创建数据库时执行的SQL语句 private static final String CREATE_TABLE = "CREATE TABLE " + ContactContract.ContactEntry.TABLE_NAME + " (" + ContactContract.ContactEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + ContactContract.ContactEntry.COLUMN_NAME + " TEXT," + ContactContract.ContactEntry.COLUMN_PHONE_NUMBER + " TEXT)"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 当数据库版本升级时,可以在此删除旧表并创建新表 db.execSQL("DROP TABLE IF EXISTS " + ContactContract.ContactEntry.TABLE_NAME); onCreate(db); } } ``` 在上面的代码中,`onCreate()`方法用于首次创建数据库时执行的SQL语句,创建了一个名为"ContactDB"的表,包含_id(主键)、_name和_phone_number三列。`onUpgrade()`方法则在数据库版本升级时被调用,通常会先删除旧表,然后重新创建新表。 接下来,我们要了解数据的增删查改(PRDU)操作: 1. 插入数据(Put/Insert):使用SQLHelper的`getWritableDatabase()`或`getReadableDatabase()`获取可读写的数据对象,然后调用`SQLiteDatabase`的`insert()`方法进行数据插入。 2. 读取数据(Read/Select):使用`SQLiteDatabase`的`query()`方法查询数据。可以传入SQL语句,或者使用`SQLiteQueryBuilder`构建更复杂的查询。 3. 更新数据(Update):使用`SQLiteDatabase`的`update()`方法更新已存在的数据,需要提供更新条件。 4. 删除数据(Delete):使用`SQLiteDatabase`的`delete()`方法删除指定条件的数据。 在实际操作中,我们通常会创建一个ContentProvider来封装这些数据库操作,使得数据能被其他应用访问,并遵循Android的权限控制。ContentProvider还与ContentResolver配合,提供了Uri方式的接口,方便进行数据操作。 定义Contract类:正如描述中提到,Contract类是一个常量容器,用来存放表名、列名等,这样在修改数据结构时只需要在一个地方修改,提高了代码的可维护性。例如: ```java public class ContactContract { public static abstract class ContactEntry implements BaseColumns { public static final String TABLE_NAME = "contact"; public static final String COLUMN_NAME = "name"; public static final String COLUMN_PHONE_NUMBER = "phone_number"; } } ``` 在这个例子中,`ContactContract`定义了一个内部抽象类`ContactEntry`,实现了`BaseColumns`接口以获取`_ID`字段。`COLUMN_NAME`和`COLUMN_PHONE_NUMBER`分别表示姓名和电话号码的列名。 总结来说,Android中保存数据到SQL数据库涉及创建数据库、定义Contract类、使用ContentProvider封装操作以及执行基本的增删查改操作。通过这些步骤,我们可以高效地管理应用中的结构化数据。