2012-07-19 71 views
1

我使用的是类SQLiteOpenHelper延长如下:添加新字段的存在表

public class PocketSQLite extends SQLiteOpenHelper { 
    public String TableNames[]; 
    public String FieldNames[][]; 
    public String FieldTypes[][]; 
    public static String NO_CREATE_TABLES = "no tables"; 
    private String message = ""; 

    public PocketSQLite(Context context, String name, CursorFactory factory, int version, String tableNames[], String fieldNames[][], String fieldTypes[][]) { 
     super(context, name, factory, version); 
     TableNames = tableNames; 
     FieldNames = fieldNames; 
     FieldTypes = fieldTypes; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     if (TableNames == null) { 
      message = NO_CREATE_TABLES; 
      return; 
     } 

     for (int i = 0; i < TableNames.length; i++) { 
      String sql = "CREATE TABLE " + TableNames[i] + "("; 
      for (int j = 0; j < FieldNames[i].length; j++) 
       sql += FieldNames[i][j] + " " + FieldTypes[i][j] + ","; 
      sql = sql.substring(0, sql.length() - 1); 
      sql += ")"; 
      db.execSQL(sql); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     for (int i = 0; i < TableNames[i].length(); i++) { 
      String sql = "DROP TABLE IF EXISTS " + TableNames[i]; 
      db.execSQL(sql); 
     } 
     onCreate(db); 
    } 
} 

正如你看到的,构造将进入表的字段。如何更新onUpgrade函数以将新字段添加到现有表中?

例如:

旧表(2场): “姓名”, “电话”

新表中(3场): “姓名”, “电话”, “电子邮件”

+0

您只需增加'版本'编号即可调用'onUpgrade'函数。 – Luksprog 2012-07-19 15:18:29

回答

0

首先,当您进行此类结构性更改时,您需要更改数据库版本。然后,在升级方法中,编写你的sql语句,它会修改你的表。

当您下次运行应用程序时,onUpgrade方法将被调用,并且您的sql语句将被执行,这将修改您的表。

http://www.w3schools.com/sql/sql_alter.asp

您可以删除该表为好,但如你所说,你将失去现有的数据。

+0

对不起,我是一个非常初学SQLite的人。我想知道如果我需要修改存在表的字段,那么声明是什么。或者上面的代码已经可以做到了吗? – 2012-07-19 15:24:24

+0

或者我需要先删除表格,然后再添加它?但是如果我放弃它,我会丢失表中的数据吗? – 2012-07-19 15:26:53