最近把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的考虑了,内网抽取式最好的方式,线程协作就可以。
开发效率和执行效率折中就行。
如果有帮助,希望结帖