Android 多线程操作数据库
在 Android 开发中,数据库操作是比较常见的一个需求,但是如果在主线程中进行数据库操作的话,很容易因为耗时导致界面卡顿、ANR 等问题。因此,我们需要开辟一个单独的线程进行数据库操作,从而提高应用的用户体验。
下面就介绍一下 Android 多线程操作数据库的方法。
首先,我们需要创建一个数据库。
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "my_db.db"; private static final int DB_VERSION = 1; private static final String TABLE_NAME = "my_table"; private static final String CREATE_TABLE_SQL = "CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)";
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) {
}
}
这里创建了一个名为 my_db.db 的数据库,并且包含一个名为 my_table 的表,其中包含两个字段:_id 和 name。
在多线程操作数据库中,我们需要将插入数据、查询数据等操作放到单独的线程中执行。这里我们使用 AsyncTask 类来执行数据库操作。
(1) 插入数据
插入数据操作如下所示:
public class InsertTask extends AsyncTask
public InsertTask(Context context, String name) {
mContext = context;
mName = name;
mDatabaseHelper = new MyDatabaseHelper(mContext);
}
@Override
protected Void doInBackground(Void... params) {
mDatabase = mDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", mName);
mDatabase.insert(MyDatabaseHelper.TABLE_NAME, null, values);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Toast.makeText(mContext, "插入完成", Toast.LENGTH_SHORT).show();
}
}
在 doInBackground() 方法中执行插入数据操作,可以使用 getWritableDatabase() 方法获取数据库实例,也可以使用 getReadableDatabase() 方法获取数据库实例。这里使用 insert() 方法插入数据。