将sqlite数据库包含到C ++ JNI项目中

时间:2011-05-15 15:41:41

标签: c++ eclipse sqlite java-native-interface

我已经编写了我的C ++类,现在我必须创建库以在android上使用它们。一个类处理数据库,我事先准备好了(包括图片和字符串)。在Qt中它工作正常,因此代码很健壮。我在Eclipse中有我的Android项目,JNI似乎没问题,因为在运行时android不会崩溃。问题是数据库未命中。

有人能告诉我如何将它包含在项目中,以便通过构建apk文件来包含它吗?看过一个教程解释将它放入assets文件夹并创建一个扩展的Java类,但我不知道它是否也适用于i0m在JNI级别上使用查询调用(在C ++中)。

我以前很伤心,我没有错误,既没有编译,也没有运行时间。应用程序根本不起作用...因为没有数据库。当我将本机方法的定义留空时,它不会崩溃,因此这意味着对本机方法的调用工作正常。

一个例子,我在C ++课程中有:

bool Database::open() {
if (sqlite3_open(dataBaseName, &databaseConnection) == SQLITE_OK){
    return true;
}
return false;
}

我用本机电话调用它:

JNIEXPORT void JNICALL Java_com_tamagotchi_ItemShop_openDatabase(JNIEnv *, jobject){
    db->open();
    }

...在java类上:

static {
    System.loadLibrary("nativeLib");
}

public native void openDatabase();

更新: 我已经看到了一个示例,其中数据库包含在assets文件夹中,并且可以使用getResources()。getAssets()。open(“some_file”)访问该文件。问题是这是针对Java方面的,但我不想从Java端访问它,我需要使用nativelibrary从C ++ / JNI端访问它。

1 个答案:

答案 0 :(得分:0)

我用另一种方式解决了。我在虚拟SD卡上加载了数据库,并在我的C ++类中更改了数据库的路径。现在它工作正常。诅咒,这不是正确的方法,但我不得不在星期五之前提出项目...... 我还发现了其他解决方案,但它需要API 2.3,其中包括本机端的getResources()。