在我的工作中我试图做一些比较,因此我需要能够从NDK写入数据库。 我试图从this source鼓舞,但我不断收到(从仿真器和物理设备)以下的插入错误:
文件进行加密或不是一个数据库Android NDK写入SQLite
我相关的代码:
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。
简单地通过将文件提取到您的PC开始。如果你可以在那里用sqlite打开它,你将能够使用http://blog.kdehairy.com/using-sqlite-natively-on-android/。如果该文件被加密或损坏,则说明您有问题。 –
我拉它,它是完全可读和可写的。 – Majkeee