2014-01-22 3 views
1

Я слежу за учебником от джентльмена на YouTube под названием Prakeesh, где объясняет, как выполнять операции CRUD в базе данных на Android.Android - Структура класса базы данных OOP

До сих пор у меня есть следующий код, который работает прекрасно:

public class DataHandler { 

public static final String NAME = "name"; 
public static final String TABLE_NAME = "mytable"; 
public static final String DATABASE_NAME = "mydatabase"; 
public static final int DATABASE_VERSION = 1; 
public static final String TABLE_CREATE = "create table " + TABLE_NAME + " (" + NAME + " text not null);"; 
SQLiteDatabase database; 

DatabaseHelper databaseHelper; 
Context context; 

public DataHandler(Context context) { 
    this.context = context; 
    databaseHelper = new DatabaseHelper(context); 
} 

public DatabaseHelper open(){ 
    database = databaseHelper.getWritableDatabase(); 
    return databaseHelper; 
} 

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

public long insert(String text){ 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(NAME, text); 
    return database.insert(TABLE_NAME, null, contentValues); 
} 

public Cursor returnData(){ 
    return database.query(TABLE_NAME, new String[] {NAME}, null, null, null, null, NAME); 
} 

// Database Helper Class 
private static class DatabaseHelper extends SQLiteOpenHelper{ 

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

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL(TABLE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) { 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(sqLiteDatabase); 
    } 
} 

} 

В целом, выше содержит DataHandler класса, который содержит базу данных Schema, то есть имя базы данных, мое имя таблицы (только одна таблицы), версия базы данных и т. д. Этот класс содержит методы CRUD и конструктор, который инициализирует объект DatabaseHelper.

Объект DatabaseHelper является внутренним классом, который расширяет SQLiteOpenHelper и переопределяет методы onCreate и onUpdate, которые выполняют, как они говорят.

Мой вопрос, наконец, как я реорганизовать и реструктурировать вышеуказанную конструкцию, так что я могу выполнять CRUD операции, скажем, столика в ресторане или таблицы пользователя? Где сидит DatabaseHelper? Как я могу ссылаться на объект DatabaseHelper внутри каждого объекта? Как я могу легко ввести еще много объектов, которые могут иметь одни и те же операции CRUD?

ответ

1

Я бы посоветовал использовать контент-провайдера с контрактом, это дает вам стандартный способ доступа к вашим данным и выполнения операций crud. Тогда ваш помощник базы данных просто выполнит настройку таблиц и заполняет любые данные по умолчанию.

Контракт определяет объекты модели, а затем поставщик контента может вставлять, обновлять и удалять эти объекты из базы данных с абстрагированного слоя выше.

Поставщики контента также дают вам много возможностей, например, связывание с загрузчиками, поэтому вы можете автоматически обновлять списки, основываясь на том, что они привязаны к поставщику контента и «прослушивают» изменения в базовом источнике данных.

+0

Ahah. Я надеялся, что меня не привлекут к контент-провайдерам, так как они чрезвычайно тяжелы (для меня) и как в документации Google они заявляют, что они в основном используются для доступа к данным из внешнего проспективного, т. Е. Вне приложения. Думаю, я начну смотреть на него. Знаете ли вы о хорошем/легком для понимания чтении для этого подхода, пожалуйста? – Subby

+1

http://www.tutorialspoint.com/android/android_content_providers.htm - это кажется довольно хорошим. Кроме того, если вы когда-либо хотели внедрить синхронизацию через адаптер синхронизации, для этого вам потребуется поставщик контента для доступа к вашим данным, поэтому, возможно, это не будет плохой инвестицией вовремя, если это когда-либо будет применяться к вам. – simon

Смежные вопросы