Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Confused regarding SQLiteOpenHelper and creating multiple tables

I feel the Android developer guidelines regarding saving data in SQLite is really lacking. I'm confused as to what the general guideline is when it comes to multiple tables.

I currently have two Managers that expose (CRUD) two different sets of entities to the UI.

Do I:

Create a private class SQLiteOpenHelper inside each Manager. Each Helper will have its own onCreate for its own TABLE?

or

Create a single public class SQLiteOpenHelper that creates both TABLE's?

I don't see any clear advantages to using the one above the other but I see both of them being used. What does Android say about this?

like image 760
ndsc Avatar asked Jan 03 '13 11:01

ndsc


1 Answers

The following example code creates two tables. I also added code for creating and inserting data.

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

public class MyDB {
    public static final String KEY_ROWID = "_id";
    public static final String KEY_FIRSTNAME = "ID";
    public static final String KEY_LASTNAME = "CS";
    public static final String KEY_DESIGNATION = "CN";
    public static final String KEY_DN = "DN";  

    private static final String TAG = "MyDB";       
    private static final String DATABASE_NAME = "test.db";    
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE_ValidateUser_DriverInfo =
        "create table tabletest1 (_id integer primary key autoincrement, "
        + "ID text not null, CS text not null, CN text not null, DN text not null);";

    private static final String DATABASE_CREATE_ValidateUser_TripInfo =
        "create table tabletest2 (_id integer primary key autoincrement, "
        + "TI text not null, PU text not null, LN text not null, FN text not null, Origin varchar not null, De text not null);";

    private Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public MyDB(Context ctx) {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                db.execSQL(DATABASE_CREATE_ValidateUser_DriverInfo);
                db.execSQL(DATABASE_CREATE_ValidateUser_TripInfo);
        }

        @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 tabletest1");
            db.execSQL("DROP TABLE IF EXISTS tabletest2");
            onCreate(db);
        }
    }

    public MyDB open() throws SQLException {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---closes the database---    
    public void close() {
        DBHelper.close();
    }

    public long insertTitle(ContentValues initialValues, String TableName) {
        return db.insert(TableName, null, initialValues);
    }
}

USe the following code to insert the data from your required activity.

MyDB mmdb=new MyDB(getBaseContext());
mmdb.open();

initialValues = new ContentValues();
initialValues.put("ID", ID);
initialValues.put("CS", CS);
initialValues.put("CN", CN);
initialValues.put("DN", DN);

mmdb.insertTitle(initialValues, "tabletest1");  

mmdb.close();
like image 126
itsrajesh4uguys Avatar answered Nov 15 '22 17:11

itsrajesh4uguys