sqlite3_prepare_v2 returns 1
sqlite3_prepare_v2 returns 1
这几天我遇到了一个让我发疯的问题。
我在 GitHub、link Here、
上使用 API swiftdata.swift
好吧,如果我使用 Iphone6 在 iOS 模拟器上启动我的项目,它运行得很好,但如果我使用另一个 iOS 设备,应用程序就会崩溃。
我发现错误是由于指令
func executeQuery(sqlStr: String, withArgs: [AnyObject]? = nil) -> (result: [SDRow], error: Int?) {
var resultSet = [SDRow]()
var sql = sqlStr
if let args = withArgs {
let result = bind(args, toSQL: sql)
if let err = result.error {
return (resultSet, err)
} else {
sql = result.string
}
}
var pStmt: COpaquePointer = nil
var status = sqlite3_prepare_v2(SQLiteDB.sharedInstance.sqliteDB, sql, -1, &pStmt, nil)
if status != SQLITE_OK {
println("SwiftData Error -> During: SQL Prepare")
println(" -> Code: \(status) - " + SDError.errorMessageFromCode(Int(status)))
if let errMsg = String.fromCString(sqlite3_errmsg(SQLiteDB.sharedInstance.sqliteDB)) {
println(" -> Details: \(errMsg)")
}
sqlite3_finalize(pStmt)
return (resultSet, Int(status))
}
.........
}
这是与数据库的连接
private class SQLiteDB {
class var sharedInstance: SQLiteDB {
struct Singleton {
static let instance = SQLiteDB()
}
return Singleton.instance
}
var sqliteDB: COpaquePointer = nil
var dbPath = SQLiteDB.createPath()
var inTransaction = false
var isConnected = false
var openWithFlags = false
var savepointsOpen = 0
let queue = dispatch_queue_create("SwiftData.DatabaseQueue", DISPATCH_QUEUE_SERIAL)
// MARK: - Database Handling Functions
//open a connection to the sqlite3 database
func open() -> Int? {
if inTransaction || openWithFlags || savepointsOpen > 0 {
return nil
}
if sqliteDB != nil || isConnected {
return nil
}
let status = sqlite3_open(dbPath.cStringUsingEncoding(NSUTF8StringEncoding)!, &sqliteDB)
if status != SQLITE_OK {
println("SwiftData Error -> During: Opening Database")
println(" -> Code: \(status) - " + SDError.errorMessageFromCode(Int(status)))
if let errMsg = String.fromCString(sqlite3_errmsg(SQLiteDB.sharedInstance.sqliteDB)) {
println(" -> Details: \(errMsg)")
}
return Int(status)
}
isConnected = true
return nil
}
.........
}
为什么?
我导入了库 libsqlite3.0.dylib,我怀疑这个库只与 iPhone6 相关。
谁能帮帮我?
我用Xcode6.1
谢谢
sqlite3_open
会愉快地打开一个不存在的文件,并创建一个新的空数据库。
使用不带 SQLITE_OPEN_CREATE 标志的 sqlite3_open_v2。
并使用正确的路径。
这几天我遇到了一个让我发疯的问题。
我在 GitHub、link Here、
上使用 API swiftdata.swift好吧,如果我使用 Iphone6 在 iOS 模拟器上启动我的项目,它运行得很好,但如果我使用另一个 iOS 设备,应用程序就会崩溃。 我发现错误是由于指令
func executeQuery(sqlStr: String, withArgs: [AnyObject]? = nil) -> (result: [SDRow], error: Int?) {
var resultSet = [SDRow]()
var sql = sqlStr
if let args = withArgs {
let result = bind(args, toSQL: sql)
if let err = result.error {
return (resultSet, err)
} else {
sql = result.string
}
}
var pStmt: COpaquePointer = nil
var status = sqlite3_prepare_v2(SQLiteDB.sharedInstance.sqliteDB, sql, -1, &pStmt, nil)
if status != SQLITE_OK {
println("SwiftData Error -> During: SQL Prepare")
println(" -> Code: \(status) - " + SDError.errorMessageFromCode(Int(status)))
if let errMsg = String.fromCString(sqlite3_errmsg(SQLiteDB.sharedInstance.sqliteDB)) {
println(" -> Details: \(errMsg)")
}
sqlite3_finalize(pStmt)
return (resultSet, Int(status))
}
.........
}
这是与数据库的连接
private class SQLiteDB {
class var sharedInstance: SQLiteDB {
struct Singleton {
static let instance = SQLiteDB()
}
return Singleton.instance
}
var sqliteDB: COpaquePointer = nil
var dbPath = SQLiteDB.createPath()
var inTransaction = false
var isConnected = false
var openWithFlags = false
var savepointsOpen = 0
let queue = dispatch_queue_create("SwiftData.DatabaseQueue", DISPATCH_QUEUE_SERIAL)
// MARK: - Database Handling Functions
//open a connection to the sqlite3 database
func open() -> Int? {
if inTransaction || openWithFlags || savepointsOpen > 0 {
return nil
}
if sqliteDB != nil || isConnected {
return nil
}
let status = sqlite3_open(dbPath.cStringUsingEncoding(NSUTF8StringEncoding)!, &sqliteDB)
if status != SQLITE_OK {
println("SwiftData Error -> During: Opening Database")
println(" -> Code: \(status) - " + SDError.errorMessageFromCode(Int(status)))
if let errMsg = String.fromCString(sqlite3_errmsg(SQLiteDB.sharedInstance.sqliteDB)) {
println(" -> Details: \(errMsg)")
}
return Int(status)
}
isConnected = true
return nil
}
.........
}
为什么? 我导入了库 libsqlite3.0.dylib,我怀疑这个库只与 iPhone6 相关。 谁能帮帮我?
我用Xcode6.1
谢谢
sqlite3_open
会愉快地打开一个不存在的文件,并创建一个新的空数据库。
使用不带 SQLITE_OPEN_CREATE 标志的 sqlite3_open_v2。 并使用正确的路径。