2012-12-14 39 views

回答

24

对于所有表,您应该有一个SQLiteOpenHelper类。检查this链接。

+0

好的,谢谢,你知道有一个为每个sideeffect表?或者只有一个文件才能编辑? –

+1

查看编辑答案 –

+1

谢谢,这是很有说服力的,我会尽快阅读! :D:D –

4

只是一种不同的方法的缘故:

您可以随时在onOpen(..)方法overried有叫你onCreate(..)。一定要使用"CREATE TABLE IF NOT EXISTS..."语句,而不是"CREATE TABLE"

@Override 
public void onOpen(SQLiteDatabase db) { 
    onCreate(db); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_FRIENDS_TABLE = "CREATE TABLE IF NOT EXISTS ..."; 
    db.execSQL(CREATE_FRIENDS_TABLE); 
} 

你做的每从SQLiteOpenHelper

扩展类
1

@TheReader是正确的。我更喜欢所有表的单个SQLiteOpenHelper,下面是我所做的:将“表创建”sqls的列表传递给SQLiteOpenHelper子类的构造函数,然后在onCreate函数中迭代列表以创建每个表。 所以我SQLiteOpenHelper的子类看起来某事像这样:

public ModelReaderDbHelper(Context context, List<String> createSQLs, List<String> deleteSQLs){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     this.TABLE_CREATION_SQLS = createSQLs; 
     this.TABLE_DELETE_SQLS = deleteSQLs; 
    } 
    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     for(String oneCreation : TABLE_CREATION_SQLS){ 
      sqLiteDatabase.execSQL(oneCreation); 
     } 
    } 

惟独另一个问题:添加新表后,并与现有的旧安装安装应用程序的新版本,新表将不会被创建,因为旧数据库的存在将阻止onCreate函数被调用。所以用户必须先卸载应用程序,然后完全安装应用程序。该DATABASE_VERSION帮助,它似乎安卓不会执行的onCreate功能当且仅当的一个existin数据库具有相同的名称和相同的DATABASE_VERSION

相关问题