2011-09-23 71 views
3

我想在我的Android应用程序中更新我的数据库。当我更新版本号时,onUpgrade被调用,但版本号不会增加,所以每次访问数据库时,都会调用onUpgrade。这里是我的代码:onUpgrade数据库Android版本号不增加

private final static int DB_VERSION = 8; 

     public DataBaseHelper(Context context) { 

     super(context, DB_NAME, null, DB_VERSION); 
     this.myContext = context; 
    } 
     @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d(TAG, "in onCreate"); 
     try { 
      copyDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion); 
     myContext.deleteDatabase(DB_NAME); 
     Log.d(TAG, "the version is " + db.getVersion()); 
     db.setVersion(newVersion); 
     Log.d(TAG, "the version is " + db.getVersion()); 
     onCreate(db);   
    } 

任何人都知道为什么会发生这种情况?

+0

也许thil链接可能会有所帮助http://stackoverflow.com/questions/7173896/onupgrade-database-oldversion-newversion –

+0

我已经看过这个链接...我仍然无法弄清楚。即使数据库版本号是静态的,版本号也不会在onUpgrade()中升级。 OnUpgrade被调用,但版本号没有得到更新... – coder

+0

当onUpgrade被调用时,oldVersion和newVersion的值是什么? –

回答

0

我最终加入另一个数据库添加到资产的文件夹。我知道它不是最好的解决方案,但它工作。当这次升级应用程序时,它只是写入新数据库 - 它有一个新名称 - 而不是旧数据库。我检查是否存在旧的,如果存在,我删除它。

2

不要尝试手动设置版本。 (这一切都照顾。)

不要试图删除数据库。您正在升级它,并且手动设置您刚刚删除的数据库版本不会很好。

您应该在onUpgrade中做的所有事情是对表格结构进行必要的更改。如果你想通过删除当前表(而不是数据库)然后重新创建它们,那很好。

如果你需要在你的表来保存数据,看看这个问题的建议,关于如何做到这一点: Upgrade SQLite database from one version to another?

+0

根据api,context.deleteDatabase()删除整个数据库。我想我想删除整个事情,因为我的数据库的结构和所有2000+条目都需要更改?所有的表格都需要更改... – coder

+0

不,试图删除数据库会严重地将事情搞砸在这里。只需删除表格,然后重新创建它们。 –

+0

我该如何重写资产文件夹中的表格而不是整个数据库? – coder