Ваш помощник по базе данных должен по крайней мере переопределить метод onCreate для создания таблиц в базе данных только один раз (когда база данных впервые создается на устройстве) ....
открытый класс ExampleDatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "ExampleDb";
public static final int DB_VERSION = 1;
public static final String TABLE_NAME = "ExampleTable";
private static final String TABLE_CREATE_SQL =
"CREATE TABLE " + TABLE_NAME +" (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"Name TEXT NOT NULL " +
")";
public ExampleDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE_SQL);
}
}
... при разработке приложения вы, вероятно, захотите внести изменения в структуру базы данных, поэтому вам может потребоваться удалить эти существующие таблицы и запустить новый SQL для их воссоздания.
Вы можете сделать это, переопределив метод onUpdate, но вы должны помнить, что нужно увеличивать версию базы данных каждый раз, когда вы меняете схему, чтобы сработал onUpdate ...
public class ExampleDatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "ExampleDb";
public static final int DB_VERSION = 2;
public static final String TABLE_NAME = "ExampleTable";
private static final String TABLE_CREATE_SQL =
"CREATE TABLE " + TABLE_NAME +" (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"Name TEXT NOT NULL, " +
"PhoneNumber TEXT NOT NULL" +
")";
public ExampleDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
В опубликованном приложении вы, вероятно, захотите улучшить onUpdate, чтобы сохранить данные из предыдущей версии в новом формате, но в процессе разработки вышесказанное подойдет.
Этот пример достаточно прост, поскольку он имеет дело только с одной таблицей в базе данных. Я бы посоветовал создать класс для каждой таблицы со статическими методами для работы с onCreate и onUpgrade для этой таблицы, которые вызываются из вспомогательного класса ...
public class ExampleDatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "ExampleDb";
public static final int DB_VERSION = 1;
public ExampleDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
ExampleTable1.onCreate(db);
ExampleTable2.onCreate(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
ExampleTable1.onUpgrade(db, oldVersion, newVersion);
ExampleTable2.onUpgrade(db, oldVersion, newVersion);
}
}