2012-07-19 77 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