Swift for SQLiteでこのライブラリを使用できます
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
Swiftで記述されたSQLDataAccessクラスでSwiftを使用するSQLiteデモ
プロジェクトに追加する
プロジェクトに追加する必要があるファイルは3つだけです* SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Headerは、Xcodeのプロジェクト「Objective-C Bridging Header」の「Swift Compiler-General」の下に設定する必要があります
使用例
ViewController.swiftのコードに従って、SQLDataAccess.swiftで単純なSQLを作成する方法を確認してください。まず、処理するSQLiteデータベースを開く必要があります。
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
openConnectionが成功した場合は、テーブルAppInfoに簡単な挿入を実行できます
//Insert into Table AppInfo
let status = db.executeStatement("insert into AppInfo (name,value,descrip,date) values(?,?,?,?)",
”SQLiteDemo","1.0.2","unencrypted",Date())
if(status)
{
//Read Table AppInfo into an Array of Dictionaries
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
それがいかに簡単かを見てください!
db.executeStatementの最初の用語は文字列としてのSQLであり、それに続くすべての用語はAny型の可変引数リストであり、配列内のパラメーターです。SQL引数のリストでは、これらの用語はすべてコンマで区切られています。文字列、整数、日付、ブロブは、後のステートメントの直後に入力できます。これらの用語はすべて、後のパラメータと見なされるためです。可変個引数配列は、すべての続編を1つのexecuteStatementまたはgetRecordsForQuery呼び出しで入力するのに便利です。パラメータがない場合は、SQLの後に何も入力しないでください。
結果の配列はディクショナリの配列で、「キー」はテーブルの列名、「値」はSQLiteから取得したデータです。forループを使用してこの配列を簡単に反復処理したり、直接出力したり、これらのディクショナリ要素をモデル使用のためにビューコントローラーで使用するカスタムデータオブジェクトクラスに割り当てたりできます。
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccessは、テキスト、double、float、blob、Date、integer、およびlong long integerを格納します。Blobの場合、binary、varbinary、blobを格納できます。
テキストの場合、文字、文字、CLOB、国別可変文字、ネイティブ文字、nchar、nvarchar、varchar、バリアント、可変文字、テキストを格納できます。
日付の場合は、日時、時刻、タイムスタンプ、日付を保存できます。
整数の場合、bigint、bit、bool、boolean、int2、int8、integer、mediumint、smallint、tinyint、intを格納できます。
Doubleの場合、10進数、倍精度、float、数値、実数、doubleを格納できます。最も精度が高いのはDoubleです。
NullタイプのNullを格納することもできます。
ViewController.swiftでは、より複雑な例が実行され、辞書を「Blob」として挿入する方法が示されます。さらに、SQLDataAccessはネイティブのSwift Date()を理解するので、これらのオブジェクトを変換せずに挿入できます。また、オブジェクトをテキストに変換して保存し、取得すると、テキストから日付に変換します。
もちろん、SQLiteの本当の力は、トランザクション機能です。ここでは、文字列で400のSQLステートメントをパラメーター付きでキューに入れ、それらを一度にすべて挿入できます。これは非常に高速であるため、非常に強力です。ViewController.swiftは、これを行う方法の例も示しています。実際に行っているのは、「sqlAndParams」と呼ばれるディクショナリの配列を作成することだけです。この配列では、文字列の続編ステートメントまたはクエリの2つのキー「SQL」と、ネイティブオブジェクトのSQLiteの配列である「PARAMS」を含むディクショナリを格納します。そのクエリを理解します。後継クエリとパラメータの個別のディクショナリである各「sqlParams」は、「sqlAndParams」配列に格納されます。この配列を作成したら、呼び出すだけです。
let status = db.executeTransaction(sqlAndParams)
if(status)
{
//Read Table AppInfo into an Array of Dictionaries for the above Transactions
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
さらに、すべてのexecuteStatementメソッドとgetRecordsForQueryメソッドは、SQLクエリの単純な文字列とクエリで必要なパラメーターの配列を使用して実行できます。
let sql : String = "insert into AppInfo (name,value,descrip) values(?,?,?)"
let params : Array = ["SQLiteDemo","1.0.0","unencrypted"]
let status = db.executeStatement(sql, withParameters: params)
if(status)
{
//Read Table AppInfo into an Array of Dictionaries for the above Transactions
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
Objective-Cバージョンも存在し、同じSQLDataAccessと呼ばれるため、Objective-CまたはSwiftで続編を作成することを選択できます。さらに、SQLDataAccessもSQLCipherで動作します。現在のコードはまだ動作するように設定されていませんが、実行するのは非常に簡単です。これを実行する方法の例は、実際にはSQLDataAccessのObjective-Cバージョンにあります。
SQLDataAccessは非常に高速で効率的なクラスであり、CoreDataに付随するすべてのCoreDataコアデータ整合性エラークラッシュなしに、基になるデータストアとしてSQLiteを実際に使用するCoreDataの代わりに使用できます。