2015-11-05 91 views
2

我正在嘗試爲db4o創建一個通用輔助類。db4o openfile文件格式不兼容

我創建了一個靜態類,它應該在每個應用程序頁面中作爲助手工作。

這裏是我的代碼:

public final class DatabaseHelper implements IDatabaseHelper{ 

    private static ObjectContainer database; 
    private static final String DATABASE_NAME = "MyDB.db4o"; 
    private static final int DATABASE_MODE = 0; 
    private static Context ctx; 

    private DatabaseHelper(){ 
    } 

    public DatabaseHelper(Context context) { 
     ctx=context; 
     database=null; 
    } 

    public void OpenDatabse(){ 

     try { 
      if (database == null) { 
       EmbeddedConfiguration nc = Db4oEmbedded.newConfiguration(); 
       database = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), 
         db4oDBFullPath()); 
      } 
     } catch (Exception ie) { 
      Log.e(DatabaseHelper.class.getName(), ie.toString()); 
     } 


    } 

    private String db4oDBFullPath() { 
     return ctx.getDir("data", DATABASE_MODE) + "/" + DATABASE_NAME; 
    } 

    public void CloseDatabase() { 
     if (database != null) { 
      database.close(); 
     } 
    } 

    public ObjectContainer getDatabaseSession() { 

     return database.ext().openSession(); 
    } 

} 

我的問題是在OpenDatabase()方法。我總是得到

com.db40.ext.Db4oException: File format incompatible: '/data/data/personal.pier.appname/app_data/MyDB.db4o'

我試着添加/刪除最後的屬性。我試着一步一步地調用它。我是db4o的新手,我不知道該怎麼做。

更一般地說,是否可以創建一個通用的幫助類?任何幫助將不勝感激。謝謝

回答

0

是的,可以創建這樣一個通用的幫助類。最終的屬性對db4o正常工作。我還建議捕獲整個堆棧跟蹤越來越多出來的錯誤:

Log.e(DatabaseHelper.class.getName(), ie.toString()); 

由於該消息指出,由於某些原因,文件格式不匹配。所以下一個問題是:

  • 由於某種原因,Db4oEmbedded.openFile()被調用時該文件是否已經存在?
  • 數據庫是否在另一個平臺(如C#)上創建,然後被複制過?這是行不通的。 Java和C#版本無法正確讀取其他數據庫?
  • 其他文件操作對該android文件有效嗎?像可以使用RandomAccessFile讀取和寫入該文件位置?