- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要在 Android 中使用 ndk 从 C++ 层执行数据库操作。
但是在使用 sqlite3_open 打开数据库时,出现“无法打开数据库文件”错误。
我正在使用 Java 获取数据库路径:
String sqliteDir = getApplicationContext().getDatabasePath("MyDb").getPath();
C++代码:
int rc = sqlite3_open(dbPath, _db);
if(rc != SQLITE3_OK) LOGD("Can't open database: %s with path %s\n", KSqlite3::sqlite3_errmsg(_db), dbPath);
else LOGD(" Opened database successfully %s \n", sqlite3_errmsg(_db));
安卓.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myMod
LOCAL_SRC_FILES := myMod.cpp sqlite3.c
LOCAL_LDLIBS := -llog
#Includes various C++ libraries
include $(BUILD_SHARED_LIBRARY)
错误信息:无法打开数据库:无法打开路径为/data/data/com.packageName/databases/MyDb 的数据库文件
最佳答案
正如 Seva Alekseyev 所建议的,问题是我错误地认为 sqlite3_open 将创建整个路径,如果它不存在但它不存在。所以我需要手动创建/databases。而不是像这样获取数据库目录:
String sqliteDir = getApplicationContext().getDatabasePath("MyDb").getPath();
我得到它直到数据库:
String sqliteDir = "/data/data/" + getApplicationContext().getPackageName() + "/databases";
现在在调用 sqlite3_open 之前的 cpp 代码中,检查它是否存在。
struct stat sb;
int32_t res = stat(path, &sb);
if (0 == res && (sb.st_mode & S_IFDIR)){
LOGD("Database already exists in path:%s", path);
}else{
LOGD("Creating database path:%s", path);
int status = mkdir(path, S_IRWXU | S_IRWXG | S_IWOTH | S_IXOTH);
if(status != 0){
LOGD("Error occurred while creating database path : %s", path);
return;
}
}
string dbPath = string(path) + "//MyDb";
然后继续正常的代码:
int rc = sqlite3_open(dbPath, _db);
if(rc != SQLITE3_OK) LOGD("Can't open database: %s with path %s\n", KSqlite3::sqlite3_errmsg(_db), dbPath);
else LOGD(" Opened database successfully %s \n", sqlite3_errmsg(_db));
关于c++ - 安卓NDK : unable to open database file using sqlite3_open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704813/
主屏幕启动后,通知打开事件上的 OneSignal 会触发,然后导航到所需的屏幕。我想检测应用程序是否在主屏幕呈现之前按下通知启动,以便我可以直接导航到第二个屏幕并避免不必要地调用 api。 "rea
我的一位同事在对图像进行分类时在 python 服务中遇到错误。下面是错误跟踪日志 File "nsfw.py", line 7, in score = classifier.get_score(
我的一位同事在对图像进行分类时在 python 服务中遇到错误。下面是错误跟踪日志 File "nsfw.py", line 7, in score = classifier.get_score(
我正在尝试使用代号 1 运行连续测试。 第一个测试打开模拟器并访问 sqlite 数据库并返回 true 并关闭该模拟器。下一个测试打开另一个模拟器并运行该测试,但这个模拟器不访问数据库,所以我假设为
我是一名优秀的程序员,十分优秀!