2016-08-09 16 views
-1

私はAndroidにSQLiteデータベースを持つプロジェクトを持っています。行を保存する、テーブルからすべての行を読み込む、行を削除するなど、いくつかの操作を実行したいと思います。他のスレッドでその操作を実行したいです。私の質問は、どのマルチタスキング方法を使用すべきですか?私は、上記で書いた操作を表すいくつかのメソッドを持っている、データベース・マネージャーのようなクラスについて考えていました。私はそれをいかに簡単かつ簡単にするか考えていません。たぶんサービスは私にこの仕事を手伝ってくれるかもしれません。あるいは、ある操作で別のクラスを使うべきでしょうか?例えば、1つの操作のための1つのAsyncTaskクラス?あなたの答えとアドバイスのすべてを待っています。ありがとう!別のスレッドでSQLite操作を実行する

答えて

1

私は、バックグラウンドサービスは単純なデータベース操作のために少し過度のものだと思います。

ほとんどの場合、スクロールするのに必要なリストタイプのデータには、Cursor Adapterのリストビューを使用します。小さなデータセットの場合は、おそらく< 10行ですが、UIスレッドでデータを取得するだけです。

複雑な操作の場合、起動時にDBの状態を確認したり、行のセットを削除したりすると、目的ごとにAsyncTaskを作成します。

私は今AndroidのSQL Liteプロジェクトの中で、しばらくの間、ORM Liteを使っています。私は単なるDatabaseManagerの規約に従い、カスタムクエリを必要とするマネージャクラス内のメソッドを作成します。

0

あなたは、あなたの活動にこれを追加し、テーブルなどに内容に

を追加するように必要なすべての操作を行うことができますthis.InそのdoInBackground()メソッドのためのAsyncTaskを使用することができます。

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; 
} 
関連する問題