第4章 DBI・DBD::Symfowareの仕様
4.3 DBIクラスメソッド
4.3 DBIクラスメソッド
DBIクラスメソッドについて説明します。
4.3.1 connect
説明
connectは、データベースに接続し、データベースハンドルオブジェクトへ の参照を返却します。
構文
$dbh = DBI‑>connect( $data̲source, $user̲name, $password ) ;
$dbh = DBI‑>connect( $data̲source, $user̲name, $password, ¥%set̲attr ) ;
パラメタ
$data̲source :
データソース名"dbi:ドライバ名:DBDに渡す文字列"を指定してください。
Symfoware/RDBにローカルアクセスする場合、"dbi:Symfoware:データベース 名"または"dbi:Symfoware:データベース名;パラメタ"を指定してください。
Symfoware/RDBにリモートアクセスする場合、"dbi:Symfoware:データベース 名,ホスト名,ポート番号"または"dbi:Symfoware:データベース名,ホスト名, ポート番号;パラメタ"を指定してください。
undefまたは空文字列の場合、環境変数DBI̲DSNの値が採用されます。
パラメタについては、 付録A connect、connect̲cachedのパラメタの記述形 式 を参照してください。
$user̲name :
認可識別子を指定してください。
undefの場合、環境変数DBI̲USERの値が採用されます。
$password :
パスワードを指定してください。
undefの場合、環境変数DBI̲PASSの値が採用されます。
¥%set̲attr :
すべてのハンドルに共通の属性の連想配列を指定してください。
戻り値
データベースハンドルオブジェクトへの参照が返却されます。
異常の場合、undefが返却されます。
例
use DBI ;
$dbh = DBI‑>connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError =>
0 } ) ;
if( ! defined $dbh ) { die "$DBI::errstr¥n" ; }
$dbh‑>do( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$dbh‑>do( "CREATE TABLE STOCKS.STOCK ( PRODUCT̲NUMBER INTEGER NOT NULL, PRODUCT̲NAME CHAR(20) NOT NULL, STOCK̲QUANTITY INTEGER, WAREHOUSE̲NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ;
$dbh‑>do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ;
$dbh‑>do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die
"$DBI::errstr¥n" ;
$sth = $dbh‑>prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ;
$sth‑>execute ;
while( @array = $sth‑>fetchrow̲array ) { printf "@array¥n" ;
}
die "$DBI::errstr¥n" if $DBI::err ;
$rc = $dbh‑>disconnect ; if( ! $rc ) {
die "$DBI::errstr¥n" ; }
4.3.2 connect̲cached
説明
connect̲cachedは、データベースに接続し、DBIクラス内でパラメタの値で データベースハンドルオブジェクトを連想配列に格納し、データベースハンド ルオブジェクトへの参照を返却します。
同じパラメタ値でconnect̲cachedを呼び出した場合、前回のデータベース接 続が有効であれば、データベース接続を再使用します。
構文
$dbh = DBI‑>connect̲cached( $data̲source, $user̲name, $password ) ;
$dbh = DBI‑>connect̲cached( $data̲source, $user̲name, $password, ¥%set̲attr ) ;
パラメタ
$data̲source :
データソース名"dbi:ドライバ名:DBDに渡す文字列"を指定してください。
Symfoware/RDBにローカルアクセスする場合、"dbi:Symfoware:データベース 名"または"dbi:Symfoware:データベース名;パラメタ"を指定してください。
Symfoware/RDBにリモートアクセスする場合、"dbi:Symfoware:データベース 名,ホスト名,ポート番号"または"dbi:Symfoware:データベース名,ホスト名, ポート番号;パラメタ"を指定してください。
undefまたは空文字列の場合、環境変数DBI̲DSNの値が採用されます。
パラメタについては、 付録A connect、connect̲cachedのパラメタの記述形 式 を参照してください。
$user̲name :
認可識別子を指定してください。
4.3 DBIクラスメソッド
undefの場合、環境変数DBI̲USERの値が採用されます。
$password :
パスワードを指定してください
undefの場合、環境変数DBI̲PASSの値が採用されます。
¥%set̲attr :
すべてのハンドルに共通の属性の連想配列を指定してください。
戻り値
データベースハンドルオブジェクトへの参照が返却されます。
異常の場合、undefが返却されます。
例
use DBI ;
$dbh1 = DBI‑>connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError
=> 0 } ) or die "$DBI::errstr¥n" ;
$dbh2 = DBI‑>connect̲cached( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ;
$dbh3 = DBI‑>connect̲cached( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ;
$dbh1‑>do( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$dbh1‑>do( "CREATE TABLE STOCKS.STOCK ( PRODUCT̲NUMBER INTEGER NOT NULL, PRODUCT̲NAME CHAR(20) NOT NULL, STOCK̲QUANTITY INTEGER, WAREHOUSE̲NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ;
$dbh1‑>do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ;
$dbh1‑>do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ;
$sth1 = $dbh2‑>prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ;
$sth2 = $dbh2‑>prepare̲cached( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::
errstr¥n" ;
$sth3 = $dbh2‑>prepare̲cached( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::
errstr¥n" ;
$sth1‑>execute ;
$sth2‑>execute ;
$sth3‑>execute ;
$drh = $dbh1‑>{Driver} ;
printf "Kids : %d¥n", $drh‑>{Kids} ; printf "ActiveKids : %d¥n", $drh‑>{ActiveKids} ; printf "Kids : %d¥n", $dbh3‑>{Kids} ; printf "ActiveKids : %d¥n", $dbh3‑>{ActiveKids} ;
$hash̲dbh = $drh‑>{CachedKids} ;
@keys̲dbh = keys(%$hash̲dbh) ;
$key̲dbh = $keys̲dbh[0] ;
$hash̲sth = $dbh2‑>{CachedKids} ;
@keys̲sth = keys( %$hash̲sth ) ;
$key̲sth = $keys̲sth[0] ; printf "Key : %s¥n", $key̲dbh ; printf "Key : %s¥n", $key̲sth ;
$dbh = $hash̲dbh‑>{$key̲dbh} ;
$sth = $hash̲sth‑>{$key̲sth} ;
printf "Name : %s¥n", $dbh‑>{Name} ;
printf "NUM̲OF̲FIELDS : %d¥n", $sth‑>{NUM̲OF̲FIELDS} ;
$sth‑>finish or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $dbh3‑>{Kids} ;
printf "ActiveKids : %d¥n", $dbh3‑>{ActiveKids} ;
$sth1‑>finish or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $dbh3‑>{Kids} ; printf "ActiveKids : %d¥n", $dbh3‑>{ActiveKids} ;
$dbh‑>disconnect or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $drh‑>{Kids} ; printf "ActiveKids : %d¥n", $drh‑>{ActiveKids} ;
$dbh1‑>disconnect or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $drh‑>{Kids} ; printf "ActiveKids : %d¥n", $drh‑>{ActiveKids} ;
4.3.3 available̲drivers
説明
available̲driversは、@INCの示すディレクトリ内から利用できるDBDモジュ ールを探し、DBDのドライバ名の配列を返却します。
@INCの示すディレクトリ内に同じドライバ名があった場合、後から調べられ るDBDのドライバは配列に登録されません。
構文
@drivers = DBI‑>available̲drivers ;
@drivers = DBI‑>available̲drivers( $quiet ) ;
パラメタ
$quiet :
@INCの示すディレクトリ内に同じDBDのドライバ名があったときに警告を発 生させない場合は、trueを指定してください。
@INCの示すディレクトリ内に同じDBDのドライバ名があったときに警告を発 行させる場合は、falseを指定してください。
戻り値
ドライバ名の配列が返却されます。
例
use DBI ;
foreach $inc ( @INC ) { printf "INC : %s¥n", $inc ; }
@drivers = DBI‑>available̲drivers( false ) ; foreach $driver ( @drivers ) {
printf "driver : %s¥n", $driver ; }
4.3 DBIクラスメソッド
4.3.4 data̲sources
説明
data̲sourcesは、指定したDBDのドライバで利用できるデータソース名の配 列を返却します。
ドライバ名が"Symfoware"の場合、配列の要素数は0となります。
構文
@data̲sources = DBI‑>data̲sources( $driver ) ;
@data̲sources = DBI‑>data̲sources( $driver, ¥%set̲attr ) ;
パラメタ
$driver :
"Symfoware"を指定してください。
¥%set̲attr :
現在は、指定したときの動作は不定です。
戻り値
データソース名の配列が返却されます。
例
use DBI ;
@data̲sources = DBI‑>data̲sources( "Symfoware" ) ; foreach $data̲source ( @data̲sources ) {
printf "data source : %s¥n", $data̲source ; }
4.3.5 trace
説明
traceは、トレース情報の出力を設定します。
traceを呼び出さない場合、環境変数DBI̲TRACEの値が採用されます。環境変 数DBI̲TRACEに、"ファイル名"または"トレースレベル=ファイル名"を指定しま す。
構文
DBI‑>trace( $level ) ;
DBI‑>trace( $level, $filename ) ;
パラメタ
$level :
トレースレベルを指定してください。トレースレベルと意味を以下に示しま す。
トレースレベル 意味
1〜10 DBIの情報を出力します。
トレースレベル 意味
11 DBD::Symfowareのメソッド呼び出し情報を出力します。
12 DBD::SymfowareからのCLI関数呼び出し情報を出力しま す。
13 DBD::Symfowareの詳細情報を出力します。
$filename :
トレース情報の出力先のファイル名を指定してください。標準出力にトレー ス情報を出力する場合、STDOUTを指定してください。
undefの場合、環境変数DBI̲TRACEの値が採用されます。環境変数DBI̲TRACE の値がundefの場合、標準エラー出力STDERRにトレース情報を出力します。
例
use DBI ; DBI‑>trace( 1 ) ;
DBI‑>trace̲msg( "*** connecting ***¥n" ) ;
$dbh = DBI‑>connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError =>
0 } ) or die "$DBI::errstr¥n" ;
DBI‑>trace̲msg( "*** connected ***¥n" ) ;
$dbh‑>trace( 2 ) ;
printf "level : %d¥n", $dbh‑>{TraceLevel} ;
$dbh‑>trace̲msg( "*** doing ***¥n" ) ;
$dbh‑>do( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$dbh‑>do( "CREATE TABLE STOCKS.STOCK ( PRODUCT̲NUMBER INTEGER NOT NULL, PRODUCT̲NAME CHAR(20) NOT NULL, STOCK̲QUANTITY INTEGER, WAREHOUSE̲NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ;
$dbh‑>do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ;
$dbh‑>do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
$dbh‑>trace̲msg( "*** done ***¥n" ) or die "$DBI::errstr¥n" ;
$sth = $dbh‑>prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; printf "level : %d¥n", $sth‑>{TraceLevel} ;
$sth‑>trace( 3 ) ;
printf "level : %d¥n", $sth‑>{TraceLevel} ;
$sth‑>{TraceLevel} = 4 ;
printf "level : %d¥n", $sth‑>{TraceLevel} ;
$sth‑>trace̲msg( "*** executing ***¥n" ) ;
$sth‑>execute ;
$sth‑>trace̲msg( "*** executed ***¥n" ) ; while( @array = $sth‑>fetchrow̲array ) { printf "@array¥n" ;
}
die "$DBI::errstr¥n" if $DBI::err ;
DBI‑>trace̲msg( "*** disconnecting ***¥n" ) ;
$dbh‑>disconnect or die "$DBI::errstr¥n" ; DBI‑>trace̲msg( "*** disconnected ***¥n" ) ;
4.3 DBIクラスメソッド
4.3.6 trace̲msg
説明
trace̲msgは、トレース情報に文字列を出力します。
構文
DBI‑>trace̲msg( $text ) ;
DBI‑>trace̲msg( $text, $min̲level ) ;
パラメタ
$text :
トレースに出力する文字列を指定してください。
$min̲level :
文字列を出力するトレースレベルを指定してください。
例
4.3.5 trace の 例 を参照してください。