2016-04-27 57 views
0

我想實現版本控制到我的數據庫。我有下面的代碼:爲什麼我的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這種方式,順便說一句)

誰能幫助我?

在此先感謝。

+0

當你構建和部署第二次(改變數據庫中的條目後),請勾選此框,該應用是否會在安裝更新之前有沒有可能從設備上卸載? – Levon

+0

可能。我如何檢查這個?我想當你部署到已經有應用程序的手機時,它只會被更新,而不是卸載並重新安裝。 –

+0

我想你應該檢查你的數據是否在你卸載你的應用程序後被擦除。 –

回答

0

如果不能訪問調試器,就很難回答出了什麼問題。但是,您創建和更新數據庫的方式看起來很不尋常且不必要的複雜。你應該考慮使用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 
    } 
} 

這工作不會丟失任何數據庫文件。

+0

它必須導入現有的數據庫。你說這很不尋常,但它有效,所以我想我會離開它。數據庫是我跨平臺項目的核心部分,因此它也必須服務於iOS端。由於這個原因,以上下文作爲參數是不可能的。 –

0

你應該在Visual Studio /工具/選項/ Xamarin/Android設置

Preserve data between deployments

+0

例如,當用戶從Play商店更新我的應用程序時,數據是否會保留? –

+0

是的。這只是一個默認情況下未設置的調試選項。 – Softlion

+0

我剛試過,它沒有改變任何東西。 –

相關問題