swift sqlite 打开数据表查询数据操作返回1

最近把android的db拿到ios上面读取,结果打开后读取的时候却返回1,这是怎么回事呢?因为我的文件是提前做好的,只要读就行了,不能创建。
代码如下

  var db: COpaquePointer = nil
    func openDatabase() -> Bool {

        let doc = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
        let dbname = "weather_new.db"
        let path = doc.first! + "/" + dbname  
        let fm = NSFileManager.defaultManager()    
        let find = fm.fileExistsAtPath(path)   
        print("find = \(find) path = \(path)")

        if sqlite3_open(path, &db) == SQLITE_OK {//这里成功了
            print("打开数据库成功")
            var stmt: COpaquePointer = nil

            let sql = "select * from provinces_city"
            let cSql = sql.cStringUsingEncoding(NSUTF8StringEncoding)
            let result = sqlite3_prepare_v2(self.db, cSql!, -1, &stmt, nil)
            print(result) //打印的是1 意思是sql错误或者表missing
            while sqlite3_step(stmt) == SQLITE_ROW {
                  recordData(stmt)
             }


        } else {
            print("打开数据库失败")
            sqlite3_close(db)
            return false
        }
        return true
    }

你swift的话,可以用fmdb类库,封装的很好处理
https://github.com/ccgus/fmdb

1.如果都是标准的数据库语句,不出现如mysql的limit等的特定语法,那么为每个数据库提供一个连接就可以了。
2.如果具有差异化的语句,那么需要自己写个utils来封装差异,因为只是抽取数据,所以hibernate这样的框架可以不考虑
3.抽取数据在java端就是网络和io的考虑了,内网抽取式最好的方式,线程协作就可以。

开发效率和执行效率折中就行。

如果有帮助,希望结帖