SQLite 尝试通过 FMDB 查询时出现错误“文件不是数据库”

问题描述 投票:0回答:1

我有一个使用 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 文件损坏吗?

swift sqlite fmdb
1个回答
0
投票

你的问题解决了吗?我也遇到了同样的问题,希望得到您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.