Как добавить еще одну таблицу в базу данных, если в Android уже есть несколько таблиц?
У меня есть приложение с таблицей 1 в базе данных ("БАЗА ДАННЫХ"). Работает правильно.
Когда я пытаюсь поместить другую таблицу с именем "Table2" в базу данных и использовать элемент в этой новой таблице в приложении, предупреждающее сообщение выглядит следующим образом.
08-28 00: 05: 58.101: E / AndroidRuntime (6317): вызвано: android.database.sqlite.SQLiteException: нет такой таблицы: Table2 (код 1): при компиляции: выберите _id, MissionNumber, NAME1, NUM1, NAME2, NUM2 из таблицы 2 08-28 00:05:58.101: E/AndroidRuntime(6317): в android.database.sqlite.SQLiteConnection.nativePrepareStatement(собственный метод)
Но если я сотру предыдущую программу и поставлю table2, то все заработает. Я сделал так, чтобы поместить код в часть onCreate в DatabaseHelper.
Тем не менее, я думаю, что люди, которые будут загружать мою программу, не предназначены для автоматического удаления предыдущей программы. Поэтому я хочу, чтобы при загрузке приложения с новой таблицей 2 люди работали правильно.
То, как я вставляю новую таблицу,
private class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
try {
String DROP_SQL = "DROP TABLE IF EXISTS " + "Table1";
db.execSQL(DROP_SQL);
} catch(Exception ex) {
}
String CREATE_SQL1 = "create table " + "Table1" + "("
+ " _id integer PRIMARY KEY autoincrement, "
+ " MissionNumber text, "
+ " NAME1 text, "
+ " NUM1 int, "
+ " NAME2 text,"
+ " NUM2 int)";
try {
db.execSQL(CREATE_SQL1);
} catch(Exception ex) {
}
TABLE_NAME = "Table1";
try {
db.execSQL( "insert into " + TABLE_NAME + "(MissionNumber, NAME1, NUM1, NAME2, NUM2) values ('GROUP1', 'lucky_teleport', 0, 'pass', '0');" );
db.execSQL( "insert into " + TABLE_NAME + "(MissionNumber, NAME1, NUM1, NAME2, NUM2) values ('GROUP2', 'no', 0, 'notyet', '0');" );
} catch(Exception ex) {
}
а также
try {
String DROP_SQL = "DROP TABLE IF EXISTS " + "Table2";
db.execSQL(DROP_SQL);
} catch(Exception ex) {
}
String CREATE_SQL2 = "create table " + "Table2" + "("
+ " _id integer PRIMARY KEY autoincrement, "
+ " MissionNumber text, "
+ " NAME1 text, "
+ " NUM1 int, "
+ " NAME2 text,"
+ " NUM2 int)";
try {
db.execSQL(CREATE_SQL2);
} catch(Exception ex) {
}
TABLE_NAME = "Table2";
try {
db.execSQL( "insert into " + TABLE_NAME + "(MissionNumber, NAME1, NUM1, NAME2, NUM2) values ('GROUP1', 'lucky_teleport', 0, 'pass', '0');" );
db.execSQL( "insert into " + TABLE_NAME + "(MissionNumber, NAME1, NUM1, NAME2, NUM2) values ('GROUP2', 'no', 0, 'notyet', '0');" );
} catch(Exception ex) {
}
Мне нелегко полностью понять, что такое база данных. Пожалуйста, поделитесь хорошими идеями, чтобы не стереть предыдущую программу, чтобы добавить новую таблицу в базу данных!
1 ответ
onCreate вызывается только в том случае, если база данных не существует, и необходимо создать новую базу данных C, если у вас установлена предыдущая версия приложения, база данных уже существует и код внутри onCreate() не выполняется
чтобы обновить базу данных, вам нужно переопределить этот метод из SQLiteOpenHelper:
onUpgrade (база данных SQLiteDatabase, int oldVersion, int newVersion)
например:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
String CREATE_SQL2 = "create table " + "Table2" + "("
+ " _id integer PRIMARY KEY autoincrement, "
+ " MissionNumber text, "
+ " NAME1 text, "
+ " NUM1 int, "
+ " NAME2 text,"
+ " NUM2 int)";
try {
db.execSQL(CREATE_SQL2);
} catch(Exception ex) {
}
TABLE_NAME = "Table2";
try {
db.execSQL( "insert into " + TABLE_NAME + "(MissionNumber, NAME1, NUM1, NAME2, NUM2) values ('GROUP1', 'lucky_teleport', 0, 'pass', '0');" );
db.execSQL( "insert into " + TABLE_NAME + "(MissionNumber, NAME1, NUM1, NAME2, NUM2) values ('GROUP2', 'no', 0, 'notyet', '0');" )
} catch(Exception ex) {
}
}
Чтобы приложение вызывало метод onUpgrade(), вы должны передать значение DATABASE_VERSION больше, чем то, которое вы передали при первом создании базы данных.
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
поэтому, если ваша константа DATABASE_VERSION была равна 1, просто увеличьте ее до 2, и вам будет вызван метод onUpgrade().
в случае новой установки вашего приложения вместо onUpgrade() будет вызываться метод onCreate(), поэтому вы должны реализовать код создания таблицы в обоих методах (или вызвать в обоих из них метод, который добавляет ваш Table2 к база данных)