Skip to content

A pure Swift framework wrapping SQLite3. Small. Simple. Safe.

License

Notifications You must be signed in to change notification settings

iThanh/SQLite.swift

 
 

Repository files navigation

SQLite.swift

A pure Swift framework wrapping SQLite3.

SQLite.swift aims to be small, simple, and safe.

Features

  • A lightweight, uncomplicated query and parameter binding interface
  • A flexible, chainable query builder
  • Safe, automatically-typed data access
  • Transactions with implicit commit/rollback
  • Developer-friendly error handling and debugging
  • Well-documented
  • Extensively tested

Usage

Explore interactively from the Xcode project’s playground.

SQLite.playground Screen Shot

import SQLite

let db = Database("path/to/db.sqlite3")

db.execute(
    "CREATE TABLE users (" +
        "id INTEGER PRIMARY KEY, " +
        "email TEXT NOT NULL UNIQUE, " +
        "manager_id INTEGER, " +
        "FOREIGN KEY(manager_id) REFERENCES users(id)" +
    ")"
)

let stmt = db.prepare("INSERT INTO users (email) VALUES (?)")
for email in ["[email protected]", "[email protected]"] {
    stmt.run(email)
}

db.totalChanges // 2
db.lastChanges  // {Some 1}
db.lastID       // {Some 2}

for row in db.prepare("SELECT id, email FROM users") {
    println("id: \(row[0]), email: \(row[1])")
    // id: Optional(1), email: Optional("[email protected]")
    // id: Optional(2), email: Optional("[email protected]")
}

db.scalar("SELECT count(*) FROM users") // {Some 2}

let jr = db.prepare("INSERT INTO users (email, manager_id) VALUES (?, ?)")
db.transaction(
    stmt.run("[email protected]"),
    jr.run("[email protected]", db.lastID)
)

SQLite.swift also exposes a powerful query building interface.

let products = db["products"]

let available = products.filter("quantity > ?", 0).order("name").limit(5)
for product in available {
    println(product["name"])
}
// SELECT * FROM products WHERE quantity > 0 ORDER BY name LIMIT 5

products.count            // SELECT count(*) FROM products
products.average("price") // SELECT avg(price) FROM products

if let id = products.insert(["name": "Sprocket", "price": 19.99]) {
    println("inserted \(id)")
}
// INSERT INTO products (name, price) VALUES ('Sprocket', 19.99)

let updates: Int = products.filter(["id": id]).update(["quantity": 20])
// UPDATE products SET quantity = 20 WHERE id = 42

let deletes: Int = products.filter(["quantity": 0]).delete()
// DELETE FROM products WHERE quantity = 0

Installation

Note: SQLite.swift requires Swift 1.1 (available in Xcode 6.1).

To install SQLite.swift:

  1. Drag the SQLite.xcodeproj file into your own project. (Submodule, clone, or download the project first.)

  2. In your target’s Build Phases, add SQLite iOS (or SQLite Mac) to the Target Dependencies build phase.

  3. Add the appropriate SQLite.framework product to the Link Binary With Libraries build phase.

  4. Add the same SQLite.framework to a Copy Files build phase with a Frameworks destination. (Add a new build phase if need be.)

Communication

Author

License

SQLite.swift is available under the MIT license. See the LICENSE file for more information.

Alternatives

Looking for something else? Try another Swift wrapper (or FMDB):

About

A pure Swift framework wrapping SQLite3. Small. Simple. Safe.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published