이 라이브러리는 Swift for SQLite https://github.com/pmurphyjam/SQLiteDemo 에서 사용할 수 있습니다.
SQLiteDemo
Swift로 작성된 SQLDataAccess 클래스와 Swift를 사용하는 SQLite 데모
프로젝트에 추가
프로젝트에 추가하려면 3 개의 파일 만 필요합니다. * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header는 'Swift Compiler-General'의 Xcode 프로젝트 'Objective-C Bridging Header'에서 설정해야합니다.
사용 예
ViewController.swift의 코드를 따라 SQLDataAccess.swift로 간단한 SQL을 작성하는 방법을 확인하세요. 먼저 처리하는 SQLite 데이터베이스를 열어야합니다.
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
openConnection이 성공하면 이제 Table 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 as String이고 다음의 모든 용어는 Any 유형의 가변 인수 목록이며 배열의 매개 변수입니다. 이러한 모든 용어는 SQL 인수 목록에서 쉼표로 구분됩니다. 이러한 모든 용어가 속편의 매개 변수로 간주되기 때문에 속편 문 바로 뒤에 문자열, 정수, 날짜 및 Blob을 입력 할 수 있습니다. 가변 인수 배열을 사용하면 한 번의 executeStatement 또는 getRecordsForQuery 호출로 모든 속편을 편리하게 입력 할 수 있습니다. 매개 변수가없는 경우 SQL 뒤에 아무것도 입력하지 마십시오.
결과 배열은 '키'가 테이블 열 이름이고 '값'이 SQLite에서 얻은 데이터 인 사전 배열입니다. for 루프를 사용하여이 배열을 쉽게 반복하거나 직접 인쇄하거나 이러한 Dictionary 요소를 모델 소비를 위해 View Controller에서 사용하는 사용자 지정 데이터 개체 클래스에 할당 할 수 있습니다.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess는 텍스트, double, float, blob, 날짜, 정수 및 long long 정수를 저장합니다. Blob의 경우 바이너리, varbinary, blob을 저장할 수 있습니다.
텍스트의 경우 char, character, clob, 국가 별 다양한 문자, 네이티브 문자, nchar, nvarchar, varchar, variant, 다양한 문자, 텍스트를 저장할 수 있습니다.
날짜의 경우 datetime, time, timestamp, date를 저장할 수 있습니다.
정수의 경우 bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int를 저장할 수 있습니다.
Doubles의 경우 소수, 배정 밀도, 부동 소수점, 숫자, 실수, 배정 밀도를 저장할 수 있습니다. Double이 가장 정확합니다.
Null 유형의 Null을 저장할 수도 있습니다.
ViewController.swift에서 Dictionary를 'Blob'으로 삽입하는 방법을 보여주는 더 복잡한 예제가 수행됩니다. 또한 SQLDataAccess는 네이티브 Swift Date ()를 이해하므로 변환없이 이러한 개체를 삽입 할 수 있으며 텍스트로 변환하여 저장하고 검색되면 다시 텍스트에서 날짜로 변환합니다.
물론 SQLite의 진정한 힘은 트랜잭션 기능입니다. 여기에서 말 그대로 매개 변수가있는 400 개의 SQL 문을 대기열에 넣고 한 번에 모두 삽입 할 수 있습니다. 이는 매우 빠르기 때문에 정말 강력합니다. ViewController.swift는이를 수행하는 방법의 예도 보여줍니다. 당신이 정말로하고있는 일은 'sqlAndParams'라는 사전 배열을 만드는 것입니다. 해당 쿼리를 이해합니다. 후속 쿼리와 매개 변수의 개별 사전 인 각 '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 대신 사용할 수 있습니다.