2014-08-27 44 views
0

我有一个应用程序与数据库中的Table1(“DATABASE”)。它工作正常。如何在Android中已经有多个表格的情况下向数据库添加另一个表格?

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

08-28 00:05:58.101:E/AndroidRuntime(6317): android.database.sqlite.SQLiteException:没有这样的表:表2(代码 1):由引起的,在编译时:选择_id,MissionNumber,NAME1 NUM1,NAME2 NUM2从表2 08-28 00:05:58.101:E/AndroidRuntime(6317):在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(母语 方法)

但是,如果我删除以前的程序,并把表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) { 

      } 

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

      } 

这不是容易的,我完全理解数据库是什么。请分享好的想法,不要抹去以前的程序,将新表添加到数据库中!

+0

看看这会帮助你:http://androidforbeginners.blogspot.com/2010/01/creating-multiple-sqlite-database。html – user3487063 2014-08-27 15:26:55

回答

0

的onCreate如果数据库不存在,一个新的数据库需要的CreateDC 如果你有安装了应用程序的早期版本只叫,不执行已经存在的数据库,里面的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()方法就会被调用。

如果新安装了应用程序,将调用onCreate()方法而不是onUpgrade(),因此您应该在两种方法中实现表创建代码(或者在两种方法中调用表创建代码)添加您的Table2到数据库)

+0

哇,它绝对工作!感谢您与我分享您的伟大意见! :) – 2014-08-28 01:00:44

相关问题