Delphi 12开发Android应用FireDAC SQLite链接错误求助
解决Delphi 12 Android FireDAC SQLite加密异常问题
问题回顾
在Delphi 12开发Android应用时,使用FireDAC结合SQLite存储数据、FDSSecurity组件实现加密,从Delphi 11迁移后出现两类异常:
- 初始运行异常:
[FireDAC][Phys][SQLite][sqlite3]-303. Capability is not supported - 设置
EngineLinkage := slFDEStatic后触发新异常:[FireDAC][Phys][SQLite]-1606. SQLite library linkage [FDEStatic] is not found
解决方案
1. 引入静态链接依赖单元
根据错误提示,必须将FireDAC.Phys.SQLiteWrapper.Stat单元纳入项目编译:
- 打开项目主DPR文件,在
uses列表末尾添加该单元:
uses ..., FireDAC.Phys.SQLiteWrapper.Stat;
也可在任意使用FireDAC的单元uses中添加,确保编译时包含静态链接库代码。
2. 调整驱动初始化逻辑
确保驱动链接配置在所有FireDAC连接组件创建之前执行,推荐在项目启动阶段初始化:
initialization if not Assigned(FDPhysSQLiteDriverLink) then begin FDPhysSQLiteDriverLink := TFDPhysSQLiteDriverLink.Create(nil); // 指定静态链接模式,适配Delphi 12+ FDPhysSQLiteDriverLink.EngineLinkage := slFDEStatic; end; finalization FDPhysSQLiteDriverLink.Free;
3. 适配FDSSecurity加密配置
Delphi 12静态链接的SQLite对加密逻辑有调整,需确保FDSSecurity及连接参数配置正确:
- 确认FDSSecurity组件的
DriverID设置为SQLite - 在FDConnection的
Params中添加加密参数:DriverID=SQLite Database=your_database.db Encrypt=Yes Password=your_secure_password - 或通过代码动态设置连接参数:
FDConnection1.Params.Clear; FDConnection1.Params.Add('DriverID=SQLite'); FDConnection1.Params.Add('Database=' + TPath.Combine(TPath.GetDocumentsPath, 'app_db.db')); FDConnection1.Params.Add('Encrypt=Yes'); FDConnection1.Params.Add('Password=MyAppEncryptKey123'); FDConnection1.Open;
4. 检查Android编译配置
- 确保项目
Project Options > Android > Application中,目标API级别符合Delphi 12要求(推荐API 33+) - 确认
Project Options > Delphi Compiler > Linking中,Link with Dynamic RTL未勾选(静态链接SQLite时,动态RTL易引发冲突)
验证步骤
- 执行
Project > Clean清理项目编译缓存 - 重新编译并部署至Android设备/模拟器
- 测试数据库连接、数据读写及加密功能是否正常
内容的提问来源于stack exchange,提问作者Velson Infotech
相关产品推荐
相关产品推荐

