事前の設定
Sqlite3を使うにはsqlite3
をrequireする必要があるので、shards.yml
のdependenciesに以下を追加して
dependencies:
sqlite3:
github: crystal-lang/crystal-sqlite3
$ shards install
を実行します。
userテーブル内のデータ
id(INT) | name(TEXT) | created_at(datetime) |
---|---|---|
1 | Freud | 2019-02-23 00:23:12.000 |
2 | Jung | 2019-02-23 00:23:12.000 |
3 | Adler | 2019-02-23 00:23:12.000 |
1件データを取得
query_one
というメソッドがあるので、これを使って取得すると簡単に1件取得できます。
その際、asで型を指定する必要があります。
require "sqlite3"
DB.open "sqlite3://./app.db" do |db|
id, name, created_at = db.query_one "SELECT id, name, created_at FROM user LIMIT 1", as: {Int32, String, Time}
puts "id: #{id}, name: #{name}, created_at: #{created_at}"
end
実行結果
$ crystal app.cr
id: 1, name: Freud, created_at: 2019-02-23 00:23:12 UTC
複数のデータを取得
データを取得するにはquery
というメソッドを使用します。
これを実行するとブロック引数にResultSet
という型のデータが返ってくるのでそれに対してreadで型を指定して取得します。
require "sqlite3"
DB.open "sqlite3://./app.db" do |db|
db.query "SELECT id, name, created_at FROM user" do |rs|
user = Hash(Symbol, Int32 | String | Time).new
rs.each do
id = rs.read(Int32)
name = rs.read(String)
created_at = rs.read(Time)
puts "id: #{id}, name: #{name}, created_at: #{created_at}"
end
end
end
実行結果
$ crystal app.cr
id: 1, name: Freud, created_at: 2019-02-23 00:23:12 UTC
id: 2, name: Jung, created_at: 2019-02-23 00:23:12 UTC
id: 3, name: Adler, created_at: 2019-02-23 00:23:12 UTC