2015-02-23 28 views
1

在我的应用程序中,我有一个使用DBHelper类中的DB查询创建的数据库。我希望onUpgrade语句在安装apk时运行,因为有可能用户可能会打开并安装相同的应用程序。如何在第一次安装时运行onUpgrade()语句?

在这种情况下,它成为设备上的第一个安装,onUpgrade不会运行,导致应用程序崩溃。

如果在以前的应用程序中更新新应用程序,它会很好地工作。

如何重新使用此?这种情况下的解决方案是什么?

请帮忙!!提前致谢 !!

这里是我的DbHelper.java

public class Dbhelper extends SQLiteOpenHelper { 


public Dbhelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

    @Override 
    public void onCreate(SQLiteDatabase database) { 

     database.execSQL(TABLE_CREATE_IMAGE); 
     database.execSQL(TABLE_CREATE_ATTEDANCE); 
     database.execSQL(TABLE_CREATE_STOCK); 


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase database, int oldVersion, 
      int newVersion) { 

       Log.e("","upgrade "); 

       database.execSQL("ALTER TABLE stock ADD db_stock_id varchar(100)");//1.1 
//    

    } 

    public void dropandcreate(SQLiteDatabase database) 
    { 

     database.execSQL("DROP TABLE IF EXISTS image"); 
     database.execSQL("DROP TABLE IF EXISTS attendance"); 
     database.execSQL("DROP TABLE IF EXISTS stock"); 

     onCreate(database); 
    } 
} 
+1

'onUpgrade不运行它会导致应用程序crash'请出示这让上应用程序崩溃 – 2015-02-23 06:01:48

+0

请发表您的'logcat' – Gattsu 2015-02-23 06:04:08

+0

我不明白是什么问题。 'onCreate()'总是必须创建表的最新版本,'onUpgrade()'仅用于升级表的旧版本。换句话说,在'onCreate()'中创建库存表的查询已经包含了'db_stock_id'这个列。 – 2015-02-23 06:05:17

回答

2

调用它自己:

@Override 
public void onCreate(SQLiteDatabase database) { 

    database.execSQL(TABLE_CREATE_IMAGE); 
    database.execSQL(TABLE_CREATE_ATTEDANCE); 
    database.execSQL(TABLE_CREATE_STOCK); 

    onUpgrade(database, VERSION); 
} 
+0

这会更新android存储的数据库版本吗? – aandis 2017-03-05 10:15:41

+0

不,数据库版本是由传递给超级构造函数的编号定义的。 – nhaarman 2017-03-05 21:48:26

相关问题