Android NDK write to SQLite
Android NDK write to SQLite
在我的工作中,我正在尝试做一些比较,因此我需要能够从NDK写入数据库。我试图从这个来源获得灵感,但我不断收到(来自模拟器和物理设备)插入时出现以下错误:
文件已加密或不是数据库
我的相关代码段:
extern "C"
{
JNIEXPORT jstring JNICALL Java_package_Benchmark_getMessage(JNIEnv *env, jobject thisObj, jstring filePath, jstring databasePath)
{
sqlite3 *db;
const char *database = env->GetStringUTFChars(databasePath, 0);
if (sqlite3_open_v2(database, &db, SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK) // returns zero but probably sets db as read-only
{
if (SQLITE_OK != sqlite3_exec(db, "INSERT INTO lessons (wordCount, wordPassedCount, lessonName, selected) VALUES (0, 0, '50k', 0)", NULL, NULL, NULL))
LOGD("%s", sqlite3_errmsg(db)); // here i get the error
int lesson_id = sqlite3_last_insert_rowid(db);
return env->NewStringUTF("Database opened!!");
}
env->ReleaseStringUTFChars(databasePath, database);
}
}
所以我的问题是:
我可以(以及如何)从 NDK 插入到应用程序的数据库(由 Java API 创建)吗?
作为解决方法,我想可以创建临时数据库(未加密),但我宁愿使用我事先由Java的SQLiteOpenHelper创建的数据库。
我发现了一个问题。首先让我说对不起,因为在我的问题中,这个问题在原始代码中是不可见的。
我传递给C++函数路径到返回的数据库文件
getDatabasePath("database_name").getAbsolutePath()
但它似乎返回带有符号链接的路径,并且 SQLite 以某种方式无法处理。
溶液:
try {
getDatabasePath("database_name").getCanonicalPath();
}
catch (IOException e) { e.printStackTrace(); }
根据手册规范确实解析符号链接。
相关文章:
- "error: no matching function for call to"构造函数错误
- 查询SQLite数据库中的日期
- 带内存和隔离功能的SQLite
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- Qt SQLite没有查询或参数计数不匹配
- Qt SQlite无法创建表
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- Android NDK write to SQLite
- Sqlite C++ Image to Blob 不会存储任何内容
- How to write Sqlite DataBase in Qt