Android SQLite数据库彻底掌握数据存储
前言
Android是个流行的移动操作系统,许多App需要获取、存储和处理数据。SQLiteDatabase是一个轻量级的数据库技术,它可被嵌入在你的应用程序中,能够提供访问和保存数据的方法。本文将为你介绍如何在Android应用程序中彻底掌握SQLite数据库,包括创建和管理数据库、增删改查操作、以及如何使用ContentProvider来共享数据等。
创建和管理数据库
在Android应用程序中,我们可以使用SQLiteOpenHelper类来创建和管理SQLite数据库。SQLiteOpenHelper提供了以下方法:
- onCreate():当数据库第一次被创建时,调用这个方法
- onUpgrade():当数据库版本号增加时,调用这个方法
下面是一个创建数据库的示例:
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "mydatabase.db";
private static final int DB_VERSION = 1;
private static final String CREATE_TABLE_SQL = "CREATE TABLE table_name (_id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
public MyDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS table_name");
onCreate(db);
}
}
增删改查操作
在SQLite中,我们可以使用SQL语句来进行增删改查操作,具体操作如下:
插入数据
public void addData(SQLiteDatabase db, String name, int age) {
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
db.insert("table_name", null, values);
}
删除数据
public void deleteData(SQLiteDatabase db, String name) {
db.delete("table_name", "name=?", new String[] {name});
}
更新数据
public void updateData(SQLiteDatabase db, String name, int age) {
ContentValues values = new ContentValues();
values.put("age", age);
db.update("table_name", values, "name=?", new String[] {name});
}
查询数据
public List<Person> queryData(SQLiteDatabase db) {
List<Person> list = new ArrayList<>();
Cursor cursor = db.query("table_name", null, null, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
Person person = new Person();
person.setId(cursor.getInt(cursor.getColumnIndex("_id")));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
list.add(person);
} while (cursor.moveToNext());
}
if (cursor != null) {
cursor.close();
}
return list;
}
ContentProvider
ContentProvider是Android中的一个组件,它提供了一种标准化的方式来共享应用程序中的数据。ContentProvider和SQLiteOpenHelper结合使用,可以让你的应用程序轻松地将数据共享给其他应用程序。
下面是一个ContentProvider的示例:
public class MyContentProvider extends ContentProvider {
private SQLiteDatabase db;
private static final String AUTHORITY = "com.example.myprovider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/table_name");
@Override
public boolean onCreate() {
MyDatabaseHelper dbHelper = new MyDatabaseHelper(getContext());
db = dbHelper.getWritableDatabase();
return db != null;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return db.query("table_name", projection, selection, selectionArgs, null, null, sortOrder);
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
db.insert("table_name", null, values);
return uri;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return db.delete("table_name", selection, selectionArgs);
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return db.update("table_name", values, selection, selectionArgs);
}
}
示例说明
示例1:创建数据库表格
下面是创建一个名为person的数据表,该表包含_id、name和age三列:
// 创建表格的SQL语句
private static final String CREATE_TABLE_SQL = "CREATE TABLE person (_id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
// 在MyDatabaseHelper中的onCreate()方法中调用该方法:
db.execSQL(CREATE_TABLE_SQL);
示例2:增删改查操作
下面是一个对person表进行增删改查操作的示例:
// 增加一条新记录
public void addPerson(String name, int age) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
db.insert("person", null, values);
db.close();
}
// 删除指定name的记录
public void deletePerson(String name) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
db.delete("person", "name=?", new String[] {name});
db.close();
}
// 修改指定name的记录
public void updatePerson(String name, int age) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", age);
db.update("person", values, "name=?", new String[] {name});
db.close();
}
// 查询所有记录
public List<Person> queryAllPerson() {
SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
List<Person> list = new ArrayList<>();
Cursor cursor = db.query("person", null, null, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
Person person = new Person();
person.setId(cursor.getInt(cursor.getColumnIndex("_id")));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
list.add(person);
} while (cursor.moveToNext());
}
if (cursor != null) {
cursor.close();
}
db.close();
return list;
}
以上就是Android SQLite数据库彻底掌握数据存储的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android SQLite数据库彻底掌握数据存储 - Python技术站