HarmonyOS鸿蒙Next flutter\sqflite 查询出错
HarmonyOS鸿蒙Next flutter\sqflite 查询出错

在安卓上运行正常,将assert中db文件转移至getApplicationDocumentsDirectory后,判断db为isOpen状态,执行query或rawQuery时,报出以上错误。在安卓执行正常,使用DBeaver可正常链接数据库及交互sql。
运行环境:deveco内置设备管理器-模拟器
已上传:
1.hilog文件。
2.最小可复现demo工程,修改ohdemo.txt后缀为ohdemo.zip解压出工程代码。
请大佬们指点迷津!!!
更多关于HarmonyOS鸿蒙Next flutter\sqflite 查询出错的实战教程也可以访问 https://www.itying.com/category-92-b0.html
楼主您好,您这边使用getDatabasesPath()代替getApplicationDocumentsDirectory()再试一下
【解决方案】
在HarmonyOS Flutter开发过程中,使用sqflite三方库打开已有数据库db文件创建连接时,数据库路径需要通过方法getDatabasesPath()获取,拼接上db文件名称后写入沙箱对应路径下,并将path传给openDataBase方法建立数据库连接,具体示例代码如下:
Future<Database> _initDatabase() async {
// 修改处1
final databasesPath = await getDatabasesPath();
final path = join(databasesPath, 'example.db');
final dbExists = await databaseExists(path);
if (!dbExists) {
try {
// 修改处2
await Directory(dirname(path)).create(recursive: true);
final data = await rootBundle.load('assets/example.db');
final bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(path).writeAsBytes(bytes, flush: true);
} catch (e) {
rethrow;
}
}
final db = await openDatabase(path);
return db;
}
更多关于HarmonyOS鸿蒙Next flutter\sqflite 查询出错的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
你好,我最新的代码已经是getDatabasesPath()。代码参见:https://developer.huawei.com/consumer/cn/forum/topic/0203202329394176652?fid=0109140870620153026 还是不行。,
楼主官方提供了完整的代码示例:https://gitee.com/scenario-samples/flutter-load-db-file 。您参照官方代码跑一下呢,
牛逼,大佬是怎么找到这个的,
鸿蒙Next暂不支持Flutter的sqflite插件。查询出错是因为该插件依赖的Android/iOS原生数据库接口在鸿蒙Next上无法运行。目前鸿蒙应用开发需使用ArkTS语言和系统自带的数据库API(如关系型数据库)进行数据存储与查询。
根据你提供的错误信息和场景,这个问题很可能与HarmonyOS Next的文件系统权限或SQLite数据库引擎的兼容性有关。错误信息显示“SQL logic error”或“no such table”,这通常意味着数据库文件本身或访问路径存在问题。
在HarmonyOS Next上,应用对文件系统的访问权限和路径处理方式可能与Android不同。虽然你已将数据库文件从assets复制到getApplicationDocumentsDirectory,但需要确认以下几点:
- 数据库文件完整性:复制后的数据库文件可能损坏。建议在复制后验证文件大小和MD5,确保与原始文件一致。
- 数据库路径权限:HarmonyOS Next对应用私有目录的访问是允许的,但需确保路径字符串正确,且数据库文件位于应用可读写的位置。
- SQLite版本差异:HarmonyOS Next内置的SQLite版本可能与Android不同,某些SQL语法或特性可能不兼容。可以尝试执行简单的SQL语句(如
SELECT 1)测试连接。 - 数据库连接状态:虽然你检查了
isOpen,但在HarmonyOS Next上,可能需要显式调用open方法并确认返回成功。
建议在代码中添加更详细的错误日志,捕获SQLite异常的具体信息,以便进一步定位问题。同时,可以尝试使用HarmonyOS Next原生的数据库API进行对比测试,以排除sqflite插件在Next上的兼容性问题。

