如果Android中已有多个表,如何向数据库中添加另一个表?

如果Android中已有多个表,如何向数据库中添加另一个表?,android,sql,database,android-sqlite,Android,Sql,Database,Android Sqlite,我在数据库中有一个表1的应用程序。它工作正常 当我尝试将另一个名为Table2的表放入数据库并在应用程序中使用此新表中的项时,警报消息如下所示 08-28 00:05:58.101:E/AndroidRuntime6317:由以下原因引起: android.database.sqlite.SQLiteException:没有这样的表:表2代码 1:,编译时:选择_id,任务号,NAME1,NUM1,NAME2, NUM2摘自表2 08-28 00:05:58.101:E/AndroidRunti

我在数据库中有一个表1的应用程序。它工作正常

当我尝试将另一个名为Table2的表放入数据库并在应用程序中使用此新表中的项时,警报消息如下所示

08-28 00:05:58.101:E/AndroidRuntime6317:由以下原因引起: android.database.sqlite.SQLiteException:没有这样的表:表2代码 1:,编译时:选择_id,任务号,NAME1,NUM1,NAME2, NUM2摘自表2 08-28 00:05:58.101:E/AndroidRuntime6317:at android.database.sqlite.SQLiteConnection.nativePrepareStatementNative 方法

但如果我删除了之前的程序,并放入表2,那么它就可以工作了。我的方法是将代码放入DatabaseHelper的onCreate部分

不过我想,下载我的程序的人不会自动删除以前的程序。所以我想要的情况是,当人们下载添加了新table2的应用程序时,它可以正常工作

我插入新表的方式是

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) {

             }

对我来说,要完全理解数据库是什么并不容易。请分享好主意,不要删除以前的程序,将新表添加到数据库中

onCreate仅在数据库不存在且需要创建新数据库时调用 如果安装了应用程序的早期版本,则数据库已经存在,并且onCreate中的代码不会执行

为了更新数据库,您需要从SQLiteOpenHelper重写此方法:

ONUPGRADESQLITEDB数据库,int旧版本,int新版本

例如:

@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方法,您应该传递一个大于首次创建数据库时传递的数据库版本值

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
所以,若您的数据库_VERSION常量等于1,只需将其增加到2,就可以调用onUpgrade方法


在新安装应用程序的情况下,将调用onCreate方法而不是onUpgrade方法,因此您应该在这两种方法中实现表创建代码,或者在这两种方法中都调用一种方法,将表2添加到数据库中

看看这是否能帮到您:哇,它确实有效!感谢您与我分享您的宝贵意见!!:
public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
}