db4o openfile文件格式不兼容

时间:2015-11-05 10:42:20

标签: java android database helper db4o

我正在尝试为db4o创建一个通用的帮助器类。

我创建了一个静态类,它应该在每个应用程序页面中作为帮助程序。

这是我的代码:

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:文件格式不兼容:   '/data/data/personal.pier.appname/app_data/MyDB.db4o'

我尝试添加/删除最终属性。我试着一步一步地调用它。我是db4o的新手,我真的不知道怎么做。

更一般地说,是否可以创建一般辅助类?任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

是的,可以创建这样的通用帮助类。 db4o的最终属性可以正常工作。我还建议捕获整个堆栈跟踪以获得更多错误:

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

如消息所示,由于某种原因,文件格式不匹配。接下来的问题是:

  • 由于某种原因,在调用Db4oEmbedded.openFile()时文件是否已存在?
  • 数据库是在另一个平台上创建的,比如C#,然后复制过来?这不起作用。 Java和C#版本无法正确读取其他数据库吗?
  • 其他文件操作是否适用于该android文件?就像可以使用RandomAccessFile读取和写入该文件位置一样吗?