- DBIx::Custom
- here
データベースへの接続
データベースへ接続するにはconnectメソッドを使用します。
# connectメソッド DBIx::Custom->connect($dsn, $user, $password, $dbi_attr, $dbix_custom_attr);
第一引数はデータソース名、第二引数はユーザー名、第三引数はパスワード、第四引数はDBIの属性、第五引数は、DBIx::Customの属性です。
接続に成功するとDBIx::Customオブジェクトが戻り値として返ります。
以下の方法も提供されていますが、特に必要のない場合は、上記の方法を利用してください。
# connectメソッド(他のやり方) my $dbi = DBIx::Custom->connect( dsn => $dsn, user => $user, password => $password, option => $dbi_attr, %dbix_custom_attr );
データソース名
データソース名を指定してSQLiteに接続してみます。
my $dsn = "dbi:SQLite:dbname=bookshop"; my $dbi = DBIx::Custom->connect($dsn);
データベースに接続するためには、第一引数にデータソース名を指定します。データソースは各データベースごとに異なるものになります。接続に成功するとDBIx::Customオブジェクトが戻り値として返ります。
ユーザー名とパスワード
データベースへの接続にユーザー名とパスワードが必要な場合は、第二引数と第三引数に指定します。
my $user = 'ken'; my $password = 'utj4857'; my $dbi = DBIx::Custom->connect($dsn, $user, $password);
DBIの属性
DBIの属性は第四引数で指定することができます。第四引数まで、DBIのconnectメソッドの引数と同じです。ユーザーとパスワードが必要ない場合は、undefを設定してください。
my $dbi_attr = {sqlite_unicode => 1}; my $dbi = DBIx::Custom->connect($dsn, $user, $password, $dbi_attr);
DBIの属性にはデフォルトで以下の値が設定されます。エラーに対しては例外を投げ、コミットはオートコミットモードになっています。これは上書きすることができます。
{ RaiseError => 1, PrintError => 0, AutoCommit => 1 }
データベースの接続管理
DBIx::Customの接続管理は、実績があり、信頼できるDBIx::Connectorによって行われます。
このためDBIx::Customは、プリフォークサーバーで、Webアプリケーションが実行された場合でも正しく動作します。
トランザクションの実行も、DBIx::Connectorのtxnメソッドによって実行できます。
# トランザクションの実行 $dbi->connector->txn(sub { # 処理1 ... # 処理2 ... });
MariaDBへ接続する
connectメソッドを使用してMariaDBに接続するには次のようにします。
# UTF-8の場合 my $dbi = DBIx::Custom->connect("dbi:mysql:database=bookshop", 'ken', '!LFKD%$&', {mysql_enable_utf8mb4 => 1}); # 3バイトのUTF-8の場合 my $dbi = DBIx::Custom->connect("dbi:mysql:database=bookshop", 'ken', '!LFKD%$&', {mysql_enable_utf8 => 1});
第一引数にデータソース名、第二引数にデータベースのユーザー名、第三引数にデータベースのパスワードを指定します。第四引数にDBIの属性を指定します。戻り値はDBIx::Customオブジェクトになります。
DBIの属性としてmysql_enable_utf8mb4に1を設定しておくと、データベースの文字列を更新・取得するときに、Perlのデコードされた文字列とUTF-8バイト列を自動的に変換してくれるので便利です。3バイトのUTF-8しかサポートされていない、古いMariaDBの場合はmysql_enable_utf8を使うことができます。
またMariaDBではホスト名やポート番号を指定してリモートにあるMariaDBサーバーに簡単に接続することができます。
my $dbi = DBIx::Custom->connect("dbi:mysql:database=bookshop;host=somehost.com;port=3306", 'ken', '!LFKD%$&');
MySQLへ接続する
connectメソッドを使用してMySQLに接続するには次のようにします。
# UTF-8の場合 my $dbi = DBIx::Custom->connect("dbi:mysql:database=bookshop", 'ken', '!LFKD%$&', {mysql_enable_utf8mb4 => 1}); # 3バイトのUTF-8の場合 my $dbi = DBIx::Custom->connect("dbi:mysql:database=bookshop", 'ken', '!LFKD%$&', {mysql_enable_utf8 => 1});
第一引数にデータソース名、第二引数にデータベースのユーザー名、第三引数にデータベースのパスワードを指定します。第四引数にDBIの属性を指定します。戻り値はDBIx::Customオブジェクトになります。
DBIの属性としてmysql_enable_utf8mb4に1を設定しておくと、データベースの文字列を更新・取得するときに、Perlのデコードされた文字列とUTF-8バイト列を自動的に変換してくれるので便利です。3バイトのUTF-8しかサポートされていない、古いMySQLの場合はmysql_enable_utf8を使うことができます。
またMySQLではホスト名やポート番号を指定してリモートにあるMySQLサーバーに簡単に接続することができます。
my $dbi = DBIx::Custom->connect("dbi:mysql:database=bookshop;host=somehost.com;port=3306", 'ken', '!LFKD%$&');
PostgreSQLへ接続する
connectメソッドを使用してPostgreSQLに接続するには次のようにします。
my $dbi = DBIx::Custom->connect("dbi:Pg:dbname=bookshop", 'ken', '!LFKD%$&', {pg_enable_utf8 => 1});
第一引数にデータソース名、第二引数にデータベースのユーザー名、第三引数にデータベースのパスワードを指定します。第四引数にDBIの属性を指定します。戻り値はDBIx::Customオブジェクトになります。
DBIの属性としてpg_enable_utf8に1を設定しておくと、データベースの文字列を更新・取得するときに、Perlのデコードされた文字列とUTF-8バイト列を自動的に変換してくれるので便利です。
またPostgreSQLではホスト名やポート番号を指定してリモートにあるPostgreSQLサーバーに簡単に接続することができます。
my $dbi = DBIx::Custom->connect("dbi:Pg:dbname=$dbname;host=somehost.com;port=5432;", 'ken', '!LFKD%$&');
SQLiteへ接続する
connectメソッドを使用してSQLiteに接続するには次のようにします。
my $dbi = DBIx::Custom->connect("dbi:SQLite:dbname=$database", undef, undef, {sqlite_unicode => 1});
第一引数にデータソース名を指定します。第四引数にDBIの属性を指定します。戻り値はDBIx::Customオブジェクトになります。
DBIの属性としてsqlite_unicodeに1を設定しておくと、データベースの文字列を更新・取得するときに、Perlのデコードされた文字列とUTF-8バイト列を自動的に変換してくれるので便利です。
またSQLiteでは試験などを行うときにメモリ上にデータベースを作成できるのが便利です。
my $dbi = DBIx::Custom->connect("dbi:SQLite:dbname=:memory:", undef, undef, {sqlite_unicode => 1});
Oracleへ接続する
connectメソッドを使用してOracleに接続するには次のようにします。
ネットサービス名で接続する場合
Oracleにはネットサービス名で接続する場合は次のような記述になります。
# Connect to Oracle(Net servrice name) my $dbi = DBIx::Custom->connect("dbi:Oracle:$net_service_name");
ネットサービス名で接続する場合はtnsnames.oraというファイルにネットサービス名を定義しておく必要があります。
tnsnames.oraは以下のパスに配置する必要があります。
$ORACLE_HOME/network/admin/tnsnames.ora
以下はtnsnames.oraのサンプルです。
mydb = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SID = XE) ) )
この場合はmydbというのがネットサービス名になります。SIDの部分にデータベース名を指定します。この例ではXEがデータベース名です。
tnsnames.oraについてはこちらの解説が詳しいです。
直接データベース名を指定する場合
直接データベース名を指定する場合は次のようにします。
# Connect to Oracle (SID) my $dbi = DBIx::Custom->connect("dbi:Oracle:host=localhost;port=1521;sid=$database");
sidがデータベース名を指定する部分になります。たとえばOracleのExpression版を利用してる場合はEXを指定すると接続できます。ポート番号を指定しない場合は1526,1521の順に自動的にポートを試してくれます。
Oracleにおけるデータベース名
Oracleにおいてはデータベース名と呼ばれるものが非常に多いです。Oracleのデータベース名についてはこちらの解説が詳しいです。
ODBC経由でMicrosoft SQL Serverへ接続する
DBIx::Customのconnectメソッドを使用してODBC経由でMicrosoft SQL Serverに接続するには次のようにします。
Windows認証の場合
# Data source name (Windows authentication) my $dsn = "dbi:ODBC:driver={SQL Server};Server={localhost\\SQLEXPRESS};" . "Trusted_Connection=yes;AutoTranslate=No;Database=master;"; # Connect my $dbi = DBIx::Custom->connect($dsn);
データソース名の始まりは「dbi:ODBC:」になります。driverの値は{SQL Server}です。Serverに指定する値は、「ホスト名\\オブジェクト名」とする必要があります。
Windows認証を使う場合はTrusted_Connectionに値をyesにします。AutoTranslateはデータの自動変換に関係しますが通常はNoに設定します。Databaseに、接続したいデータベース名を指定することができます。
またポート番号を指定したい場合はServerの値は次のように設定します。
# With port number Server={localhost\\SQLEXPRESS,1433}
この設定はDBIx::Customではなくて普通のDBIを使って行う場合も同様です。
SQL Server認証の場合
# Data source name (SQL Server authentication) my $dsn = "dbi:ODBC:driver={SQL Server};Server={localhost\\SQLEXPRESS};" . "Trusted_Connection=No;AutoTranslate=No;Database=master;"; # Connect my $dbi = DBIx::Custom->connect($dsn, 'kimoto', 'iejfid');
Windows認証の場合とほとんどおなじですが、SQL Server 認証の場合はTrusted_Connectionの部分をNoにします。またSQL Server認証はパスワードによる認証ですのでpasswordも指定します。
またSQL Server認証で接続したい場合は、SQL Server認証が有効になっていないと接続できませんので、どのような設定になっているかを確認する必要があります。
設定を変更した後はSQL Serverを再起動することを忘れないでください。
Microsoft Accessへ接続する
connectメソッドを使用してODBC経由でMicrosoft Accessに接続するには次のようにします。(この接続方法はPerlと生のDBIを使う場合も同じになります。)
mdbファイル
my $dbi = DBIx::Custom->connect("dbi:ODBC:driver=Microsoft Access Driver (*.mdb);dbq=hoge.mdb");
第一引数にデータソース名を指定します。戻り値はDBIx::Customオブジェクトになります。
mdbファイルではjoinがサポートされていない点に注意してください。これはMicrosoft Accessの制限になっています。
Microsoft Access 2007のaccdbファイル
まずこちらから2007用のODBCドライバをインストールする必要があります。
それからdsnを以下のように指定します。上記のmdbファイルを微妙に異なる({}で囲まれている)点に注意してください。
my $dbi = DBIx::Custom->connect("dbi:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=hoge.accdb");
accdbファイルではjoinを利用することができますが、列の中に.(ドット)を含めることができないようです。以下のようにセパレータを「-」などに変更すると正しく利用することができます。
$dbi->separator('-');
Microsoft Access 2010のaccdbファイル
こちらから2010用のODBCドライバーをインストールする必要があります。
接続方法は2007のものと同じになります。
DB2へ接続する
connectメソッドを使用してDB2に接続するには次のようにします。
my $dbi = DBIx::Custom->connect("dbi:DB2:db_name", $username, $password);
第一引数にデータソース名を指定します。戻り値はDBIx::Customオブジェクトになります。