一、Sqlite数据库打包使用
参考文章:qt for Android数据库连接sqlite3
1、首先在pro文件中需要添加代码。
android {
# data 是自定义的命名
data.files += $$PWD/android/sqlite.db
# /assets/是固定的
data.path = /assets/
# 在android 内部存储的安装路径,手机没root好像看不到,不知道为什么。
INSTALLS += data
}
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
这是我的项目文件夹
2、然后在主函数中添加android文件访问权限,并且将sqlite.db数据库自动复制到资源路径下就可以使用了。
// 使用 #include <QtAndroid> 头文件,需要在pro文件中添加QT依赖库 QT += androidextras
// 不修改pro文件的话直接使用 #include <QtAndroidExtras/QtAndroid> 也可以
#include <QtAndroid>
bool checkPermission()
{
QtAndroid::PermissionResult r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
if(r == QtAndroid::PermissionResult::Denied) {
QtAndroid::requestPermissionsSync( QStringList() << "android.permission.WRITE_EXTERNAL_STORAGE" );
r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
if(r == QtAndroid::PermissionResult::Denied) {
return false;
}
}
return true;
}
int main(int argc, char *argv[])
{
// 1、检测文件访问权限。没有权限无法进行下一步。
if (!checkPermission())
return 0;
// 2、检测android手机中是否存在资源路径,没有就创建。
QDir dir("/storage/emulated/0/laser/");
if (!dir.exists("/storage/emulated/0/laser/"))
dir.mkdir("/storage/emulated/0/laser/");
// 3、检测资源路径下Sqlite数据库是否存在,不存在就从打包的目录下复制过来。(安装的目录手机没root看不到,好像也访问不了。还没测试。)
QFile file("/storage/emulated/0/laser/sqlite.db");
if (!file.exists() || file.size() == 0){
QFile::copy("assets:/sqlite.db",
"/storage/emulated/0/laser/sqltie.db");
file.setPermissions(QFile::ReadUser | QFile::WriteUser);//设置权限//5
}
}
本文来自博客园,作者:筱筱竹林,转载请注明原文链接:https://www.cnblogs.com/bamboogrove/p/17271662.html