Skip to content

Repository files navigation

Perfect - SQLite Connector

Get Involed with Perfect!

Star Perfect On GithubStack OverflowFollow Perfect on TwitterJoin the Perfect Slack

Swift 4.0Platforms OS X | LinuxLicense ApachePerfectlySoft TwitterSlack Status

This project provides a Swift wrapper around the SQLite 3 library.

This package builds with Swift Package Manager and is part of the Perfect project. It was written to be stand-alone and so does not require PerfectLib or any other components.

Ensure you have installed and activated the latest Swift 4.0 tool chain.

To learn more, you can read the full documentation guide here or jump to the example here

Linux Build Notes

Ensure that you have installed sqlite3.

sudo apt-get install sqlite3

Building

Add this project as a dependency in your Package.swift file.

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

Edge Case

If you encounter error like such sqlite3.h file not found during $ swift build , one solution is to install the sqlite3-dev i.e. $ sudo apt-get install libsqlite3-dev

Usage Example

Let’s assume you’d like to host a blog in Swift. First we need tables. Assuming you’ve created an SQLite file ./db/database, we simply need to connect and add the tables.

letdbPath="./db/database"do{letsqlite=trySQLite(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
}

Next, we would need to add some content.

letdbPath="./db/database"letpostTitle="Test Title"letpostContent="Lorem ipsum dolor sit amet…"do{letsqlite=trySQLite(dbPath)defer{
sqlite.close()}try sqlite.execute(statement:"INSERT INTO posts (post_title, post_content) VALUES (:1,:2)"){(stmt:SQLiteStmt)->()intry stmt.bind(position:1, postTitle)try stmt.bind(position:2, postContent)}}catch{
//Handle Errors
}

Finally, we retrieve posts and post titles from an SQLite database full of blog content. Each id, post, and title is appended to a dictionary for use elsewhere.

letdbPath="./db/database"varcontentDict=[String: Any]()do{letsqlite=trySQLite(dbPath)defer{
sqlite.close() // This makes sure we close our connection.
}letdemoStatement="SELECT post_title, post_content FROM posts ORDER BY id DESC LIMIT :1"try sqlite.forEachRow(statement: demoStatement, doBindings:{(statement:SQLiteStmt)->()inletbindValue=5try statement.bind(position:1, bindValue)}){(statement:SQLiteStmt, i:Int)->()inself.contentDict.append(["id": statement.columnText(position:0),"second_field": statement.columnText(position:1),"third_field": statement.columnText(position:2)])}}catch{
//Handle Errors
}

Further Information

For more information on the Perfect project, please visit perfect.org.

About

A stand-alone Swift wrapper around the SQLite 3 client library.

Topics

Resources

Stars

51 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages