1

SQLlite/Android に UDF を追加するにはSQLite に拡張機能をロードするには? myfunc.cで行った「不正アクセス」を防ぐために、最初にsqlite3_enable_load_extensionを実行する必要があります

#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 lib で動作している jni コードにそれを渡しますが、この db 接続はそれで初期化されません。機能したとしても、カスタム sqlib にフラグを設定しますが、Android 統合ライブラリには設定しません。ここで指示されているように、カスタム ライブラリを使用してパッケージを変更する必要があります: http://www.sqlite.org/android/doc/trunk/www/index.wiki

于 2015-02-05T16:13:16.323 に答える