Perfect - SQLite 连接器

Get Involed with Perfect!

Star Perfect On Github Stack Overflow Follow Perfect on Twitter Join the Perfect Slack

Swift 4.0 Platforms OS X | Linux License Apache PerfectlySoft Twitter Slack Status

该项目提供了 SQLite 3 库的 Swift 封装。

此软件包使用 Swift Package Manager 构建,并且是 Perfect 项目的一部分。 它被编写为独立的,因此不需要 PerfectLib 或任何其他组件。

请确保您已安装并激活最新的 Swift 4.0 工具链。

要了解更多信息,您可以阅读完整的文档指南此处或跳转到示例此处

Linux 构建说明

请确保您已安装 sqlite3。

sudo apt-get install sqlite3

构建

将此项目作为依赖项添加到您的 Package.swift 文件中。

.Package(url: "https://github.com/PerfectlySoft/Perfect-SQLite.git", majorVersion: 3)

边缘情况

如果您在 $ swift build 期间遇到诸如sqlite3.h file not found之类的错误,一种解决方案是安装 sqlite3-dev,即$ sudo apt-get install libsqlite3-dev

使用示例

假设您想在 Swift 中托管一个博客。 首先我们需要表。 假设您已经创建了一个 SQLite 文件 ./db/database,我们只需要连接并添加表。

let dbPath = "./db/database"

do {
	let sqlite = try SQLite(dbPath)
	defer {  
		sqlite.close()
	}

	try sqlite.execute(statement: "CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY NOT NULL, post_title TEXT NOT NULL, post_content TEXT NOT NULL, featured_image_uri TEXT NOT NULL)")
} catch {
	print("Failure creating database tables") //Handle Errors
}

接下来,我们需要添加一些内容。

let dbPath = "./db/database"
let postTitle = "Test Title"
let postContent = "Lorem ipsum dolor sit amet…"

do {
   let sqlite = try SQLite(dbPath)
   defer {
     sqlite.close()
   }

   try sqlite.execute(statement: "INSERT INTO posts (post_title, post_content) VALUES (:1,:2)") {
     (stmt:SQLiteStmt) -> () in

     try stmt.bind(position: 1, postTitle)
     try stmt.bind(position: 2, postContent)
   }
 } catch {
		//Handle Errors
 }

最后,我们从一个充满博客内容的 SQLite 数据库中检索帖子和帖子标题。 每个 id、帖子和标题都会附加到一个字典中以供其他地方使用。

let dbPath = "./db/database"
var contentDict = [String: Any]()

do {
	let sqlite = try SQLite(dbPath)
		defer {
			sqlite.close() // This makes sure we close our connection.
		}
	
	let demoStatement = "SELECT post_title, post_content FROM posts ORDER BY id DESC LIMIT :1"
	
	try sqlite.forEachRow(statement: demoStatement, doBindings: {
		
		(statement: SQLiteStmt) -> () in
		
		let bindValue = 5
		try statement.bind(position: 1, bindValue)
		
	}) {(statement: SQLiteStmt, i:Int) -> () in

        self.contentDict.append([
                "id": statement.columnText(position: 0),
                "second_field": statement.columnText(position: 1),
                "third_field": statement.columnText(position: 2)
            ])
  }
	
} catch {
	//Handle Errors
}

更多信息

有关 Perfect 项目的更多信息,请访问 perfect.org