2016-08-09 9 views
-1

Ich habe ein Projekt mit SQLite-Datenbank in Android. Ich möchte einige Operationen ausführen, zum Beispiel eine Zeile speichern, alle Zeilen aus der Tabelle lesen, Zeile löschen usw. Ich möchte diese Operationen in einem anderen Thread ausführen. Meine Frage ist: welche Multitasking-Methode sollte ich verwenden? Ich habe über eine Klasse nachgedacht, etwas wie Datenbankmanager, der einige Methoden enthält, die Operationen darstellen, die ich oben geschrieben habe. Ich habe keine Idee, wie ich es einfach und einfach machen kann. Vielleicht hilft mir Service bei dieser Aufgabe oder vielleicht sollte ich eine andere Klasse für eine Operation verwenden, zum Beispiel eine AsyncTask-Klasse für eine Operation? Ich warte auf alle deine Antworten und Ratschläge. Vielen Dank!Ausführen von SQLite-Operationen in einem anderen Thread

Antwort

1

Ich würde denken, ein Hintergrund-Service ist ein bisschen übertrieben für einfache Datenbankoperationen.

In den meisten Fällen würde ich einen ListView mit einem Cursor Adapter für Listentyp Daten verwenden, die zum Scrollen benötigt wurde. Für kleinere Datensätze, vielleicht < 10 Zeilen, würde ich nur die Daten im UI-Thread abrufen.

Für komplexere Operationen, sagen wir den Zustand der DB beim Start überprüfen oder eine Reihe von Zeilen entfernen, würde ich eine AsyncTask für jeden Zweck schreiben.

Ich habe ORM Lite für fast alle meine Android SQL Lite-Projekte für eine Weile jetzt verwendet und ich folge nur der Konvention eines Singleton DatabaseManager und Methoden innerhalb der Manager-Klasse, die benutzerdefinierte Abfragen erfordern.

0

können Sie AsyncTask verwenden für this.In seine doInBackground() -Methode können Sie alle Operationen wie das Hinzufügen der Tabelle zu den Inhalten usw.

Fügen Sie diese in Ihrer Aktivität erforderlich machen.

private class myTask extends AsyncTask<Void, Void, Bitmap> { 
    DataBaseHelper db=new DataBaseHelper(context); 
    protected void doInBackground(Void... params) { 
     db.addData(.....); 
    } 
} 

Und die folgende ist die DataBaseHelper-Klasse.

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; 
} 
Verwandte Themen