Ruby/DBIライブラリ・リファレンス

[2021.5] Ruby/DBI はすでに完全に廃れています。'dbi' gem パッケージは 2010 年が最終です。'activerecord' が代替です。

Ruby/DBIライブラリのクラス一覧

Ruby/DBIライブラリは、データベースにアクセスするためのクラス、SQLのデータ型に対応するクラス、およびその他のクラスからなります。また、これらのクラスをサポートするためのモジュールもあります。

クラス一覧

クラス名                               主なクラスの内容
-----------------------------------    ----------------------------
Object
    Array
        DBI::Row                       行を表すクラス
    ColumnInfo                         列に関する情報
    DBI::Base
        DBI::BaseDatabase              
        DBI::BaseDriver
        DBI::BaseStatement
    DBI::Binary                        SQLのバイナリ型
    DBI::Date                          SQLの日付型
    DBI::Handle
        DBI::DatabaseHandle            データベースの操作
        DBI::DriverHandle
        DBI::StatementHandle           カーソル操作および列情報
    DBI::SQL::BasicQuote::Coerce
    DBI::SQL::PreparedStatement
    DBI::Time                          SQLの時刻型
    DBI::Timestamp                     SQLの日時型

RuntimeError
    DBI::Error
        DBI::DatabaseError
            DBI::DataError
            DBI::IntegrityError
            DBI::InternalError
            DBI::NotSupportedError
            DBI::OperationalError
            DBI::ProgrammingError
        DBI::InterfaceError
            DBI::NotImplementedError
    DBI::Warning

モジュール一覧

モジュール名                
----------------------------
DBI
DBI::DBD
DBI::SQL
DBI::SQL::BasicBind
DBI::SQL::BasicQuote
DBI::Utils
DBI::Utils::ConvParam
DBI::Utils::TableFormatter  
DBI::Utils::XMLFormatter

DBIモジュール

DBIモジュールは、DBMSへ接続するためのクラスメソッドが定義されています。

クラスメソッド

connect(driver_uri, user = nil, auth = nil, params = nil)
DBMSに接続し、データベースを利用可能にする。driver_uriでDBMSおよびデータベースを指定する。user、authでユーザー、パスワードを指定する。paramsは、DBMS特有のオプションを指定する。

connectメソッドは、DBI::DatabaseHandleオブジェクトを返す。

DBI::DatabaseHandleクラス

DBI::DatabaseHandleクラスは、データベースに対してSQL文の実行などを行うためのクラスです。

スーパークラス:DBI::Handle
includeするクラス:DBI::Utils::ConvParamモジュール

インスタンスメソッド

[attr]
DBMS依存のオプションの値を得る。attrは"AutoCommit"など。
[atrr] = value
DBMS依存のオプションの値を設定する。
columns(table_name)
table_nameで指定される表の列の一覧を得る。戻り値はColumnInfoの配列。表が見つからない場合は、[]を返す。
commit
現在までの変更をコミットする。transactionブロックからは抜けない。commitの後ろでrollbackしても、commitまでのSQL文は反映される。
disconnect
データベースへの接続を切断する。すでに切断されているときに呼び出すとInterfaceError例外を発生させる。
do(sql_stmt {, arg, ...})
SELECT文以外のSQL文を実行する。処理行数(挿入した行数など)を返す。
execute(sql_stmt {, arg, ...})
SELECT文を実行する。DBI::StatementHandleオブジェクトを返す。このオブジェクトをハンドルにしてカーソル操作を行うことができる。ハンドルは、DBI::StatementHandle#finishで閉じること。
execute(sql_stmt {, arg, ...}) {|statement_handle| ...}
SELECT文を実行する。ブロック変数としてDBI::StatementHandleオブジェクトstatement_handleを渡す。statement_handleを使って、カーソル操作を行える。ブロックから抜けるときに、自動的にハンドルが閉じられる。
quote(string)
引数string内の危険な文字をエスケープした文字列を返す。
rollback
現在までの変更をロールバック(破棄)する。transactionブロックからは抜けない。rollbackの後ろにあるSQL文は、正常にtransactionブロックから抜けた場合には、データベースに反映される。
select_all(sql_stmt {, arg, ...})
SELECT文を実行する。導出表をDBI::Rowオブジェクトの配列で返す。
select_all(sql_stmt {, arg, ...}) {|row| ...}
SELECT文を実行する。導出表の各行について、ブロックを呼び出す。ブロック引数rowはDBI::Rowオブジェクト。
select_one(sql_stmt {, arg, ...})
SELECT文を実行し、導出表の最初の一行を返す。戻り値はDBI::Rowオブジェクト。取り出す行がなければ、nilを返す。
tables
実表およびビュー表の一覧を、表の名前の配列で返す。
transaction {|database_handle| ...}
トランザクションを実行する。database_handleはself。ブロック内で例外が発生するとロールバックする。そうでなければ(正常にブロックから抜ければ)コミットする。

ブロック内でcommitまたはrollbackメソッドを呼び出すと、そこまでのSQL文をコミットまたはロールバックする。ブロックからは自動的には抜けない。

transactionメソッドは入れ子にしてもよい。内側のtransactionのブロック内でcommitまたはrollbackした場合は、内側のブロック内のSQL文だけが影響を受ける。

DBI::StatementHandleクラス

DBI::StatementHandleクラスは、カーソル操作、列情報を得るため、あるいは事前コンパイルしたSQL文の実行のために使われます。

SQL文を事前にコンパイルしても、PostgreSQL、MySQL、SQLiteのいずれでも効果がないので、本書では割愛します。

スーパークラス:DBI::Handle
includeするモジュール:DBI::Utils::ConvParamモジュール、Enumerableモジュール

インスタンスメソッド

cancel
カーソル操作を終了します。finishメソッドと異なり、fetchのみできなくなります。
column_info
列情報を得ます。列情報を格納したDBI::ColumnInfoオブジェクトの配列を返します。
column_names
列名の配列を返します。
each {|row| ...}
SELECT文を実行した結果得られた各行についてブロックを呼び出します。fetchメソッドのブロックを取る版です。eachメソッドから抜けるときにカーソルは自動的に閉じられます。
fetch
導出表の次の1行を取り出します。取り出す行がなければnilを返します。戻り値はDBI::Rowオブジェクトです。
fetch_many(count)
導出表の次のcount行を取り出します。戻り値はDBI::Rowオブジェクトの配列です。取り出す行がなければ[]を返します。
fetch_scroll(direction, offset = 1)
次の行、前の行、あるいは指定した行を取り出します。directionは、次のいずれかです。DBI::Rowオブジェクトを返します。
  • SQL_FETCH_NEXT
  • SQL_FETCH_PRIOR
  • SQL_FETCH_FIRST
  • SQL_FETCH_LAST
  • SQL_FETCH_ABSOLUTE
  • SQL_FETCH_RELATIVE
fetchable?
fetch可能であれば真を返します。cancelメソッドを呼ぶとfetchできなくなります。
finish
DBI::StatementHandleオブジェクトのすべての操作を終了します。finishを呼び出したあとでは、他のメソッド呼び出しは失敗します。
rows
最後に実行されたSQL文によって影響を受けた行数を返します。