Multiple Table SQLite DB Adapter(s) in Android?

后端 未结 2 1815
臣服心动
臣服心动 2020-11-29 14:49

I was reading the Android SQLite NotePad tutorial that referenced creating a DB Adapter class to create and access a DB table. When dealing with a multi-table SQLite Databa

2条回答
  •  难免孤独
    2020-11-29 15:48

    Had the same problem, tried many solutions, finnaly i made an abstract method wich constructs the database structure and has extended class for the table classes.

    This is my Database constructor class and is Abstract:

    public abstract class dbAdapter {
        public static String DATABASE_NAME = "";
        public static final int DATABASE_VERSION = 1;
        public static final String DATABASE_TABLE1 = "ContactName";
        public static final String DATABASE_TABLE2 = "PhoneNumber";
    
        public static DbHelper ourHelper;
        public static Context ourContext;
        public static SQLiteDatabase ourDatabase;
    
        boolean ourConstructorBool = false;
        boolean ourDB = false;
    
        public static final String ContactNameTable = "CREATE TABLE "+DATABASE_TABLE1+" (" +
            ContactNameAdapter.KEY_ROWID+" INTEGER PRIMARY KEY AUTOINCREMENT, " +
            ContactNameAdapter.KEY_NAME+" TEXT, " +
            ContactNameAdapter.KEY_BIRTH_DATE+" TEXT);";
    
        public static final String PhoneNumberTable = "CREATE TABLE "+DATABASE_TABLE2+" (" + 
            PhoneNumberAdapter.KEY_NUMBER+" TEXT , " +
            PhoneNumberAdapter.KEY_DESCRIPTION+" TEXT, " +
            PhoneNumberAdapter.KEY_CONTACTID+" TEXT, " +
            "FOREIGN KEY(" + PhoneNumberAdapter.KEY_CONTACTID +") REFERENCES " +
            (ContactNameAdapter.DATABASE_TABLE)+"("+ContactNameAdapter.KEY_ROWID+") ON DELETE CASCADE"+
        ");";
    
        static class DbHelper extends SQLiteOpenHelper{
            public DbHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
            @Override
            public void onCreate(SQLiteDatabase db) {
                db.execSQL(ContactNameTable);
                db.execSQL(PhoneNumberTable);
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
                db.execSQL("DROP TABLE IF EXISTS " + ContactNameAdapter.DATABASE_TABLE);
                db.execSQL("DROP TABLE IF EXISTS " + PhoneNumberAdapter.DATABASE_TABLE);
                onCreate(db);
            }
        }
    
        public dbAdapter(Activity a){   
            if(!ourConstructorBool == true){
                ourContext = a;
                DATABASE_NAME = a.getString(Asaf.com.contactsEX.R.string.DB_NAME);
                ourConstructorBool = true;
            }
        }
    
        public dbAdapter open() throws SQLException{
            if(!ourDB == true){
                ourHelper = new DbHelper(ourContext);
                ourDB = true;
            }
            ourDatabase = ourHelper.getWritableDatabase();
            return this;
        }
    
        public void close(){
            if(ourDatabase.isOpen())
                ourHelper.close();
        }
    }
    

    And this is one of my table classes, the rest of the classes are implemented the same, just add as much as you like:

    public class PhoneNumberAdapter extends dbAdapter{
    
        public static final String KEY_NUMBER = "PhoneNumber";
        public static final String KEY_DESCRIPTION = "Description";
        public static final String KEY_CONTACTID = "ContactName_id";
    
        public static final String DATABASE_TABLE = "PhoneNumber";
    
        public PhoneNumberAdapter(Activity a){
            super(a);
        }
    
        public long createEntry(String number, String description,long id){
            // TODO Auto-generated method stub
            ContentValues cv = new ContentValues();
            cv.put(KEY_NUMBER, number);
            cv.put(KEY_DESCRIPTION, description);
            cv.put(KEY_CONTACTID, id);
            return ourDatabase.insert(DATABASE_TABLE, null,cv);
        }
    }
    

    Hope I helped.

提交回复
热议问题