为什么我的SQLite数据库在更改后会被删除?

时间:2016-04-27 08:17:43

标签: android xamarin xamarin.android android-sqlite

我正在尝试将版本控制实现到我的数据库中。我有以下代码:

if (File.Exists (dbPath)) {
    database = new SQLiteConnection(dbPath);
    dbVersion = GetDatabaseVersion();
    if (dbVersion != DATABASE_VERSION) {
        CreateDatabase(dbPath);
        database = new SQLiteConnection(dbPath);
        SetDatabaseVersion(DATABASE_VERSION);
    }
} else {
        CreateDatabase(dbPath);
        database = new SQLiteConnection(dbPath);
        SetDatabaseVersion(DATABASE_VERSION);
}

第一次运行代码时File.Exists (dbPath)按预期返回false。当我停止应用程序并再次构建和部署时,File.Exists (dbPath)返回true(如预期的那样)并检查版本。但是当我更改数据库中的条目(而不是版本)并且我再次构建和部署File.Exists (dbPath)时返回false。所以我想sqlite文件在被更改后会被删除吗?

我想要实现的是当更改sqlite文件但版本号仍然相同时,应用程序的数据库不会更新。只有当版本不匹配时,才需要更新。

(顺便说一下,这种方式适用于iOS)

任何人都可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果没有访问调试器,很难回答出错的问题。但是,您创建和更新数据库的方式看起来很不寻常,而且不必要地复杂化。你应该考虑使用SQLiteOpenHelper,这将允许你这样的结构:

public class MyDatabase extends SQLiteOpenHelper {
   private static final int VERION = ...;
   public MyDatabase(Context context) {
      super(context, "mydatabasename", null, VERION);
   }
   public void onCreate(SQLiteDatabase db) {
      db.execSQL("create table...");
      ...
   }
   public void onUpgrade(SQLiteDatabase db, int oldVersion, intNewVersion) {
      db.execSQL("...")  // whatever you have to change from one version to another
   }
}

这不会丢失任何数据库文件。

答案 1 :(得分:0)

您应该在Visual Studio / Tools / Options / Xamarin / Android设置中勾选此框

Preserve data between deployments