Swiftで単純なsqliteデータベースを作成しようとしていますが、テーブルを作成しようとするとエラー(特にSQLITE_ERROR)が表示されます。 SqliteをがCocoapod経由含まれ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")
}
:
は、ここに私のコードです。私はC文字列に変換するときに文字列の異なるエンコーディングを使用しようとしました。具体的には、ASCIIエンコーディングを使用しようとしました。また、データベース名をハードコーディングしました。
sqlite3_prepare_v2
でエラーが発生します。
エラーメッセージ\ \ U {01}「\そば」です「:構文エラー」
使用 'sqlite3_errmsg()'エラーの理由を印刷します。 - Swift StringをC関数に直接渡すことができます。 'sqlite3_open(dbPath、&db)' –
@MartinRエラーメッセージは "near \" \ u {01} \ ":syntax error" –
です。http://stackoverflow.com/questions/34135305/nsfilemanager-defaultmanager-fileexistsatpathの重複-returns-false-trueの代わりに? - ファイルパスを得るのに 'absoluteString'を使わないでください。 –