Мне нужно создать почти 5-6 таблиц в приложении для Android. Какое лучшее место для создания базы данных SQLite и 5-6 таблиц? Я могу написать всю эту логику (используя SQLite open helper methods) при запуске начальной активности, но если я это сделаю, она будет вызываться каждый раз при запуске начального запуска. Это означает, что эта логика создания базы данных и таблиц будет выполняться каждый раз при запуске приложения. Пусть любой орган расскажет об этом лучше всего.Android: что является лучшим местом для создания базы данных SQLite и таблиц
ответ
Вы можете создать базу данных и таблицы в основной деятельности
Но перед созданием базы данных вы можете проверить
if(exits())
{
// do not create
}
else
{
// create here
}
Если вы пишете класс для расширения SQLiteOpenHelper и создания таблиц в OnCreate метод это будет только выполняться один раз. Помощник будет только воссоздавать данные, если вы полностью удалите данные/приложение с устройства.
От developer.android.com: Вызывается, когда база данных создается в первый раз. Именно здесь должно происходить создание таблиц и начальная совокупность таблиц.
Чтобы предоставить вам дополнительную информацию. В конструкторе класса, который используется для расширения SQLiteOpenHelper, вызовите супер-конструктор, который принимает несколько параметров. Одна из них - версия базы данных.
Если db_version передается супер конструктор отличается, то последний прошел один, метод onUpgrade вызывается в методе onUpgrade() можно назвать OnCreate()
так:
- удалить данные/приложение
- причина onUpgrade называться которая вызывает OnCreate()
являются способами создания/возобновить/удалить базу данных
Personnaly, пользуюсь опцией: CREATE TABLE IF NOT EXISTS
.
Так-й открытого помощника есть это: из параметров
private static final int VERSION_BDD = 1;
Я думаю, что openHelper не воссоздает каждую таблицу при каждом запуске.
Вы можете использовать внутренний 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