SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Praktik terbaik untuk bekerja dengan banyak tabel

Saya telah berhasil membuat kelas dasar abstrak dengan nama database/pernyataan buat dan info bersama lainnya, dan kemudian memperluasnya untuk setiap tabel. Dengan cara ini, saya dapat memisahkan semua metode CRUD saya (yang lebih saya sukai). Satu-satunya downside adalah bahwa pernyataan DATABASE_CREATE harus berada di kelas induk, dan harus menyertakan semua tabel, karena tabel baru tidak dapat ditambahkan setelahnya, tetapi menurut saya itu adalah harga kecil yang harus dibayar untuk mempertahankan CRUD metode untuk setiap tabel terpisah.

Melakukannya cukup sederhana, tetapi berikut beberapa catatannya:

  • Pernyataan create di kelas induk harus dipecah untuk setiap tabel, karena db.execSQL tidak dapat mengeksekusi lebih dari satu pernyataan.
  • Saya mengubah semua vars/metode pribadi menjadi terlindungi, untuk berjaga-jaga.
  • Jika Anda menambahkan tabel ke aplikasi yang sudah ada (tidak yakin apakah ini khusus untuk emulator), aplikasi harus dicopot pemasangannya lalu dipasang kembali.

Berikut adalah kode untuk kelas induk abstrak saya, yang didasarkan pada Tutorial Notepad. Anak-anak cukup memperluas ini, memanggil konstruktor super (jangan ragu untuk menggunakan ini):

package com.pheide.trainose;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public abstract class AbstractDbAdapter {

    protected static final String TAG = "TrainOseDbAdapter";
    protected DatabaseHelper mDbHelper;
    protected SQLiteDatabase mDb;

    protected static final String TABLE_CREATE_ROUTES =
        "create table routes (_id integer primary key autoincrement, "
        + "source text not null, destination text not null);";
    protected static final String TABLE_CREATE_TIMETABLES =    
        "create table timetables (_id integer primary key autoincrement, "
        + "route_id integer, depart text not null, arrive text not null, "
        + "train text not null);";

    protected static final String DATABASE_NAME = "data";
    protected static final int DATABASE_VERSION = 2;

    protected final Context mCtx;

    protected static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(TABLE_CREATE_ROUTES);
            db.execSQL(TABLE_CREATE_TIMETABLES);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS routes");
            onCreate(db);
        }
    }

    public AbstractDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }

    public AbstractDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }

}

Penjelasan yang sedikit lebih rinci tersedia di sini:http://pheide.com/page/11/tab/24#post13



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Inisialisasi SQLite dan database

  2. Tingkatkan baris hanya pada peningkatan aplikasi

  3. Daftar tabel PRAGMA di SQLite

  4. Bagaimana Substr() Bekerja di SQLite

  5. Buat Kunci Asing di SQLite