2012-06-04 3 views
0

Мне нужно создать почти 5-6 таблиц в приложении для Android. Какое лучшее место для создания базы данных SQLite и 5-6 таблиц? Я могу написать всю эту логику (используя SQLite open helper methods) при запуске начальной активности, но если я это сделаю, она будет вызываться каждый раз при запуске начального запуска. Это означает, что эта логика создания базы данных и таблиц будет выполняться каждый раз при запуске приложения. Пусть любой орган расскажет об этом лучше всего.Android: что является лучшим местом для создания базы данных SQLite и таблиц

ответ

0

Вы можете создать базу данных и таблицы в основной деятельности

Но перед созданием базы данных вы можете проверить

if(exits()) 
{ 
    // do not create 
} 
else 
{ 
    // create here 
} 
1

Если вы пишете класс для расширения SQLiteOpenHelper и создания таблиц в OnCreate метод это будет только выполняться один раз. Помощник будет только воссоздавать данные, если вы полностью удалите данные/приложение с устройства.

От developer.android.com: Вызывается, когда база данных создается в первый раз. Именно здесь должно происходить создание таблиц и начальная совокупность таблиц.

Чтобы предоставить вам дополнительную информацию. В конструкторе класса, который используется для расширения SQLiteOpenHelper, вызовите супер-конструктор, который принимает несколько параметров. Одна из них - версия базы данных.

Если db_version передается супер конструктор отличается, то последний прошел один, метод onUpgrade вызывается в методе onUpgrade() можно назвать OnCreate()

так:

  1. удалить данные/приложение
  2. причина onUpgrade называться которая вызывает OnCreate()

являются способами создания/возобновить/удалить базу данных

0

Personnaly, пользуюсь опцией: CREATE TABLE IF NOT EXISTS.

Так-й открытого помощника есть это: из параметров

private static final int VERSION_BDD = 1; 

Я думаю, что openHelper не воссоздает каждую таблицу при каждом запуске.

0

Вы можете использовать внутренний extendings класс по SQLiteOpenHelper и переопределить методы общественного недействительными OnCreate (SqLiteDatabase sqlLiteDatabase) и общественной недействительным onUpgrade (SQLiteDatabase sqLiteDatabase, внутр oldVersion, внутр newVersion)

OnCreate вызывается, когда не существует базы данных на диске, а вспомогательный класс должен создать новый

OnUpgrade вызывается, когда существует несоответствие версии db. Версия БД на дисках должна быть повышена до newVersion

private static final class PatientDatabaseHelper extends SQLiteOpenHelper { 

    private static final String TAG = "PatientProvider"; 

    private static final String DATABASE_NAME = "myPatient.db"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String PATIENT_TABLE = "PATIENT"; 

    private static final String CREATE_TABLE_PATIENT = 
      "create table " + PATIENT_TABLE + " (" 
        + PATIENT_KEY_ID + " integer primary key autoincrement, " 
        + PATIENT_NAME + " TEXT NOT NULL, " 
        + PATIENT_FIRST_NAME + " TEXT NOT NULL, " 
        + PATIENT_TEL + " TEXT, " 
        + PATIENT_GSM1 + " TEXT, " 
        + PATIENT_GSM2 + " TEXT, " 
        + PATIENT_BIRTHDATE + " DATE); "; 



    public PatientDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

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

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     //simple case sample - droppin the table 
     sqLiteDatabase.execSQL("DROP TABLE IF IT EXISTS " + PATIENT_TABLE); 


     //Create a new One 
     onCreate(sqLiteDatabase); 

    } 
} 

Зависит от целевой версии Android, но я думаю, что хороший подход заключается в использовании с этим в ContentProvider http://developer.android.com/guide/topics/providers/content-provider-creating.html