我在Android中有一个SQLite数据库项目。我希望对它执行一些操作,例如保存一行,从表中读取所有行,删除行等。我想在另一个线程中执行该操作。我的问题是:我应该使用哪种多任务处理方法?我在考虑一个类,比如数据库管理器,它有一些方法代表我上面写的操作。我不知道如何简单易行。也许Service会帮助我完成这项任务,或者我应该为一个操作使用另一个类,例如一个操作的一个AsyncTask类?我在等你的所有答案和建议。谢谢!
答案 0 :(得分:1)
我认为后台服务对于简单的数据库操作来说有点过分。
在大多数情况下,我使用带有Cursor Adapter的ListView来获取滚动所需的列表类型数据。对于较小的数据集,可能< 10行,我只是获取UI线程中的数据。
对于更复杂的操作,比如在启动时检查数据库的状态,或者删除一组行,我会为每个目的编写一个AsyncTask。
我一直在使用ORM Lite几乎所有的Android SQL lite项目,我只是按照单例DatabaseManager的惯例,在manager类中创建需要自定义查询的方法。
答案 1 :(得分:0)
您可以使用AsyncTask。在其doInBackground()方法中,您可以执行所有必需的操作,例如向表中添加内容等。
在您的活动中添加此内容。
private class myTask extends AsyncTask<Void, Void, Bitmap> {
DataBaseHelper db=new DataBaseHelper(context);
protected void doInBackground(Void... params) {
db.addData(.....);
}
}
以下是DataBaseHelper类。
public class DataBaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
// Database Name
public static final String DATABASE_NAME = "YourName.db";
// table name
public static final String TABLE_DATA = "your Table name";
// Table Columns names
public static final String KEY_ID = "id";
public static final String KEY_NAME = "DataName";
public static final String KEY_CONTENT = "Content";
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE_DATA = "CREATE TABLE " + TABLE_DATA + "("
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT,"
+ KEY_CONTENT + " TEXT" + ")";
db.execSQL(CREATE_TABLE_DATA);
public void addData(DataBaseModel dataBaseModel) {
SQLiteDatabase db1 = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, dataBaseModel.getDataName()); // Contact Name
values.put(KEY_CONTENT, dataBaseModel.getContent()); // Contact Phone
// Inserting Row
db1.insert(TABLE_DATA, null, values);
//Toast.makeText(context, "New row added, row id: " , Toast.LENGTH_SHORT).show();
db1.close(); // Closing database connection
}
// Getting single data
public String getData(String dataName) {
String data=null;
SQLiteDatabase db = this.getReadableDatabase();
//SQLiteDatabase db2=SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME, null, SQLiteDatabase.CREATE_IF_NECESSARY);
Cursor cursor = db.query(TABLE_DATA, new String[]{KEY_ID,
KEY_NAME, KEY_CONTENT}, KEY_NAME + "=?",
new String[]{dataName}, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
try {
data = cursor.getString(cursor.getColumnIndex(KEY_CONTENT));
}catch (Exception e){
e.printStackTrace();
data=null;
}
cursor.close();
return data;
}