MySQL も他のデータベース同様、使用するためには shard コマンドでライブラリをプロジェクトにインストールする必要がある。
まず、crysla init コマンドを使ってプロジェクトを作成する。この例では koi という名前である。
$ crystal init app koi
プロジェクトが作成されたら shard.yml を開いて次の内容を targets ブロックの後に追加する。
dependencies:
mysql:
github: crystal-lang/crystal-mysql
プロジェクトフォルダ内で shard install コマンドを実行して crystal-mysql をそのプロジェクトにインストールする。
Crystal ソースファイル src/koi.cr を編集する。
次の例は test というデータベース上の products というテーブルにクエリーを行い、内容を表示するものである。
DB.open で指定している接続文字列の形式は次のようになっている必要がある。ただし、データベースは後からも指定できる。
mysql://ユーザ:パスワード@ホスト/データベース
# koi.cr https://crystal-lang.org/reference/1.9/database/index.html
require "db"
require "mysql"
module Koi
extend self
VERSION = "0.1.0"
SELECT = "SELECT * FROM products"
# MySQL Test
def mysqltest()
# 接続文字列を使って DB を開く。
db = DB.open "mysql://user:password@localhost/test"
begin
# SELECT クエリーを行う
db.query SELECT do |rs|
# カラム名を表示する。
puts "#{rs.column_name(0)} #{rs.column_name(1)} #{rs.column_name(2)} #{rs.column_name(3)}"
# クエリー結果を表示する。
rs.each do
id = rs.read(Int32)
product = rs.read(String)
amount = rs.read(Int32)
price = rs.read(Float64)
puts "#{id}, #{product}, #{amount}, #{price}"
end
end
ensure
db.close # 接続を閉じる。
end
end
end
# モジュール関数 mysqltest を呼び出す。
Koi.mysqltest()
この例では、SELECT 文しか使っていないが、INSERT などを使う場合は、exec メソッドを使う。
(例) db.exec “INSERT INTO members VALUES(?, ?, ?, ?)”, 1, “Abe”, 15, “080-2586-8756”
このサンプルプログラムの実行例を下に示す。
$ ./koi
id product amount price
1, orange juice, 10, 120.0
2, apple juice, 10, 120.0
3, grape juice, 10, 120.0
4, soda, 15, 100.0
5, cola, 20, 110.0
6, Dr.Pepper, 0, 0.0
$