1

在 SQLlite/Android 中添加 UDF如何将扩展加载到 SQLite?首先必须执行 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");
}

爪哇

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

4

1 回答 1

0

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

于 2015-02-05T16:13:16.323 回答