开发者

Include sqlite database into a C++ JNI project

I've written my C++ classes and now I have to create the library to use them on android. One classes handles a database, which I've prepared in advance (it includes pictures and strings). In Qt it works fine, so the code is robust. I have my Android project in Eclipse, the JNI seems to be OK, since on runtime android does NOT crash. The problem is that the database misses.

Can someone tell me how to include it into the project in such a way that it will be included by building the apk file? Have seen a tutorial which explains to put it into the assets folder and creates an extended Java class, but I don't know if it works also when i0m using the query calls on the JNI level (in C++).

As I sad before, I have no errors, neither by compiling, nor by running time. The application simply doesn't work... because there is no database. When I leave the definition of the native methods blank, it does not crash, so it means the the call to the native method works fine.

An Example, in the C++ class I have:

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

I call it with the native call:

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

... On the java class:

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

public native void openDatabase();

UPDATE: I've seen an example where the database is included in the assets folder, and the the file is accessible using getResources().getAssets().open("some_file"). The problem is that this is for the Java side, but i don't nedd to 开发者_如何学运维access it from the Java side, i need to access it from the C++/JNI side using the nativelibrary.


I solved in another way. I loaded the database on the virtual SD card and changed the path of the database in my C++ class. Now it's working fine. Of curse, this is not the right way to do it, but i have to present the project no later than friday... I'found also the other solution, but it requires API 2.3 which includes the getResources() also in the native side.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜