• 検索結果がありません。

DBIクラスメソッド

第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 の 例 を参照してください。