Ruby Interface for SQLite3
Overview
This library allows Ruby programs to use the SQLite3 database engine (http://www.sqlite.org).
Note that this module is only compatible with SQLite 3.6.16 or newer.
- Source code: https://github.com/sparklemotion/sqlite3-ruby
- Mailing list: http://groups.google.com/group/sqlite3-ruby
- Download: http://rubygems.org/gems/sqlite3
- Documentation: http://www.rubydoc.info/gems/sqlite3
Quick start
For help understanding the SQLite3 Ruby API, please read the FAQ and the full API documentation.
A few key classes whose APIs are often-used are:
If you have any questions that you feel should be addressed in the FAQ, please send them to the mailing list or open a discussion thread.
require "sqlite3"
# Open a database
db = SQLite3::Database.new "test.db"
# Create a table
rows = db.execute <<-SQL
create table numbers (
name varchar(30),
val int
);
SQL
# Execute a few inserts
{
"one" => 1,
"two" => 2,
}.each do |pair|
db.execute "insert into numbers values ( ?, ? )", pair
end
# Find a few rows
db.execute( "select * from numbers" ) do |row|
p row
end
# => ["one", 1]
# ["two", 2]
# Create another table with multiple columns
db.execute <<-SQL
create table students (
name varchar(50),
email varchar(50),
grade varchar(5),
blog varchar(50)
);
SQL
# Execute inserts with parameter markers
db.execute("INSERT INTO students (name, email, grade, blog)
VALUES (?, ?, ?, ?)", ["Jane", "me@janedoe.com", "A", "http://blog.janedoe.com"])
db.execute( "select * from students" ) do |row|
p row
end
# => ["Jane", "me@janedoe.com", "A", "http://blog.janedoe.com"]
Prepare a statement
stmt = db.prepare “SELECT :inspect” stmt_lock = Mutex.new
latch = Queue.new
ts = 10.times.map { Thread.new {
latch.pop
# Add a lock when using the prepared statement.
# Binding values, and walking over results will mutate the statement, so
# in order to prevent other threads from "seeing" this thread's data, we
# must lock when using the statement object
stmt_lock.synchronize do
stmt.execute(Thread.current.inspect).to_a
end
} }
10.times { latch << nil }
p ts.map(&:value)
stmt.close “`
It is generally recommended that if applications want to share a database among threads, they only share the database instance object. Other objects are fine to share, but may require manual locking for thread safety.
Bug reports
You can file the bug at the github issues page.
Dependencies
The source code of sqlite
is distributed in the “ruby platform” gem. This code is public domain,
see https://www.sqlite.org/copyright.html for details.