我有一个使用 FMDB 打开 SQLite 数据库的 iOS 应用程序。 因此,.sqlite 文件是通过调用 Web 服务下载的,并将其存储在路径中。 下载后,我设法打开数据库连接,但当我尝试执行查询时出现 SQLite 错误。
数据库错误:26“文件不是数据库”
我的FMDB版本是2.7.5。 尝试在互联网上搜索,但没有找到有关此错误的提示。 顺便说一句,之前运行良好,没有进行任何更新。 我还可以使用 SQLiteStudio 打开 .sqlite 文件。
我打开数据库并执行查询的代码:
// Function to set up the data base path
func setUpDataBasePath() -> Void {
let documentsDirectory = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString) as String
if shouldUseDatabaseFileA {
pathToDatabase = documentsDirectory.appending("ProductScanningLogin.sqlite)")
} else {
pathToDatabase = documentsDirectory.appending("ProductScanning.sqlite")
}
}
// Function to open the database file to access the data
func openDatabase() -> Bool {
setUpDataBasePath()
if FileManager.default.fileExists(atPath: pathToDatabase) {
database = FMDatabase(path: pathToDatabase)
}
if database != nil {
if database.open() {
return true
}
}
return false
}
// This function executes the query and fetch the data which will be return in the form of Company info structure
func loadTableCompaniesWithQuery(queryToSearch: String) -> [CompanyInfo] {
var companies = [CompanyInfo]()
if openDatabase() {
let query = queryToSearch
print("success open database")
do {
print(database)
let results = try database.executeQuery(query, values: nil)
var arraySelectedCodes = [""]
if let selectedCompanyCodesString = Utilities.getValueFromUserDefaultsWith(key: UserDefaultsKeys.KSelectedCompanyCodesString) as? String {
arraySelectedCodes = selectedCompanyCodesString.components(separatedBy: ";")
}
while results.next() {
let companyCode = results.string(forColumn: TblCompanyFieldConstants.companyCode)
var companyCodeSelected = false
if arraySelectedCodes.contains(companyCode!) {
companyCodeSelected = true
}
我的完整控制台日志
下载成功。状态代码:200
将用户数据库文件下载到:file:///var/mobile/Containers/Data/Application/AA4FFE6C-E28C-4B93-9037-0C02D8EF1960/Documents/ProductScanningLogin.sqlite
成功打开数据库
打开数据库时出错:不是错误 文件不是“select [sql] from sqlite_master where [type] = 'table' and lower(name) = ?”中的数据库
数据库错误:26“文件不是数据库”
数据库查询:从 sqlite_master 中选择 [sql],其中 [type] = 'table' 且 lower(name) = ?
数据库路径:/var/mobile/Containers/Data/Application/AA4FFE6C-E28C-4B93-9037-0C02D8EF1960/Documents/ProductScanningLogin.sqlite
是因为 SQLite 文件损坏吗?
你的问题解决了吗?我也遇到了同样的问题,希望得到您的帮助!