我试图在Swift中创建一个简单的sqlite数据库,但我在尝试创建表时收到错误(特别是SQLITE_ERROR)。Swift Sqlite SQL错误
这里是我的代码:
var db :OpaquePointer?
let dbPath = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("\(Date.init().timeIntervalSince1970)".replacingOccurrences(of: ".", with: "") + ".db")
.absoluteString
var returnCode :Int32 = sqlite3_open(dbPath.cString(using: .utf8), &db)
if SQLITE_OK != returnCode {
preconditionFailure("Failed to open db")
}
var stmt :OpaquePointer?
returnCode = sqlite3_prepare_v2(db, "CREATE TABLE Things (name TEXT)".cString(using: .utf8), -1, &stmt, nil)
if SQLITE_OK != returnCode {
preconditionFailure("Failed to prepare table creation SQL")
}
SQLite是通过Cocoapod包括在内。我试过在转换为C字符串时使用不同的字符串编码,特别是我尝试过使用ASCII编码,而且我也尝试了对数据库名称进行硬编码。
该错误发生在sqlite3_prepare_v2
。
的错误消息是“近\” \∪{01} \“:语法错误”
使用'sqlite3_errmsg()'打印错误原因。 - 请注意,您可以将Swift字符串直接传递给C函数,例如'sqlite3_open(dbPath,&db)' –
@MartinR错误信息是“near \”\ u {01} \“:语法错误” –
http://stackoverflow.com/questions/34135305/nsfilemanager-defaultmanager-fileexistsatpath的副本-returns-false-instead-of-true? - 不要使用'absoluteString'来获取文件路径。 –