gpt4 book ai didi

android - 如何使用 Android NDK SQLite3 扩展 json1

转载 作者:行者123 更新时间:2023-11-29 16:33:12 25 4
gpt4 key购买 nike

对不起,我首先缺乏英语。

我编译它是因为我需要 Android NDK 中的 SQLite3 扩展 JSON1

gcc -Os -I. -DSQLITE_THREADSAFE=0     -DSQLITE_ENABLE_JSON1             \
-DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_USE_ALLOCA \
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_OMIT_DECLTYPE \
-DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE \
-DSQLITE_OMIT_DEPRECATED -DHAVE_USLEEP -DHAVE_READLINE \
shell.c sqlite3.c -ldl -lreadline -lncurses -o sqlite3

编译结果为sqlite3.exe

如何将此文件用于 Anroid NDK或者我可以找到其他方法吗?

我要使用的代码

JNIEXPORT void JNICALL
Java_com_test_ndkapp_MainActivity_SQLiteCPP(
JNIEnv *jenv,
jobject self,
jstring database_path
){
sqlite3 *db;
sqlite3_stmt *stmt;

// jstring to const char *
const char *database = jenv->GetStringUTFChars(database_path, 0);

char *zErrMsg = 0;
int rc;

//SQL ERROR:no such function: json
const char * create_sql = "create table user(name, phone)";
const char * insert_sql = "insert into user (name, phone) values(\"oz\", json('{\"cell\":\"+491765\", \"home\":\"+498973\"}'))";
const char * select_sql = "select json_extract(user.phone, '$.cell') from user";

if (sqlite3_open_v2(database, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE , NULL) == SQLITE_OK) {
LOGE("database open!!");

rc = sqlite3_exec(db, create_sql, NULL, NULL, &zErrMsg);

if( rc != SQLITE_OK ) {
LOGE("SQL ERROR:%s", zErrMsg);
sqlite3_free(zErrMsg);
} else {
LOGE("CREATE Operation done successfully\n");
}

rc = sqlite3_exec(db, insert_sql, NULL, NULL, &zErrMsg);

if( rc != SQLITE_OK ) {
LOGE("SQL ERROR:%s", zErrMsg);
sqlite3_free(zErrMsg);
} else {
LOGE("INSERT Operation done successfully\n");
}

rc = sqlite3_prepare_v2(db, select_sql, -1, &stmt, NULL);

if( rc != SQLITE_OK ) {
LOGE("SQL ERROR:%s", zErrMsg);
sqlite3_free(zErrMsg);
} else {
while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
const unsigned char * aaa = sqlite3_column_text (stmt, 0);
const unsigned char * bbb = sqlite3_column_text (stmt, 1);

LOGE("%s, %s", aaa, bbb);
}

if (rc != SQLITE_DONE) {
LOGE("error: %s", sqlite3_errmsg(db));
}

LOGE("SELECT Operation done successfully\n");

sqlite3_finalize(stmt);
}

} else {
LOGE("database can not open!! : %s", sqlite3_errmsg(db));
}

sqlite3_close(db);
}

我试过了
只需将 .c 文件和 .h 文件放在 cpp 文件夹中 → SQLite3 可以工作但没有这样的函数 json

最佳答案

您需要 libsqlite3,而不是可执行文件,因此您不需要编译 shell.c。有一个 GitHub project包括为您创建此类库的 Android.mk,您可能会找到 static library更易于在您的 JNI 项目中使用。

关于android - 如何使用 Android NDK SQLite3 扩展 json1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com