在sqlite / android中添加用户自定义函数

时间:2013-03-15 12:07:48

标签: android android-ndk user-defined-functions android-sqlite

在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调用永远不会回来,没有错误线它可以工作。 有谁知道这里出了什么问题?最好的代码示例。

1 个答案:

答案 0 :(得分:0)

从Java获得的sqlite数据库是使用Android集成的sqlite lib创建/初始化的。然后将它传递给jni代码,该代码使用与您的自定义sqlite lib不同的版本,并且此db连接未使用它进行初始化。即使它有效,您也可以在自定义sqlib上设置标志,但不在Android集成lib上设置。您必须一直使用自定义库,按照此处的说明更改包: http://www.sqlite.org/android/doc/trunk/www/index.wiki