在SQLlite / Android How to load extensions into SQLite?中添加UDF首先必须执行sqlite3_enable_load_extension以防止我在myfunc.c中进行的“未经授权的访问”
#include <sqlite3.h>
#include <jni.h>
#include <stdlib.h>
jstring
Java_com_test_abc_SQLiteOpenHelper_enableExtension(JNIEnv* env, jobject thiz, sqlite3 *db)
{
sqlite3_enable_load_extension(db, 1); //errorline, without any infos
return (*env)->NewStringUTF(env, "enableExtension done");
}
的java
package com.test.abc;
....
public class MyOpenHelper extends SQLiteOpenHelper {
...
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
enableExtension(db);
}
public native String enableExtension(SQLiteDatabase db);
}
没有成功。从Java到C的JNI调用永远不会回来,没有错误线它可以工作。 有谁知道这里出了什么问题?最好的代码示例。
答案 0 :(得分:0)
从Java获得的sqlite数据库是使用Android集成的sqlite lib创建/初始化的。然后将它传递给jni代码,该代码使用与您的自定义sqlite lib不同的版本,并且此db连接未使用它进行初始化。即使它有效,您也可以在自定义sqlib上设置标志,但不在Android集成lib上设置。您必须一直使用自定义库,按照此处的说明更改包: http://www.sqlite.org/android/doc/trunk/www/index.wiki