NAME

JDBIx - Object-oriented flavor of DBIx. DBIx - Perl extension for DBI, providing a higher-level abstraction for more database-independence.


AUTHOR

    This module is Copyright (C) 2000 by
                Jim Turner
                
                Email:  turnerjw784 - at - yahoo .dot com
        All rights reserved.

You may distribute this module under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.


SYNOPSIS / DESCRIPTION.

use JDBIx;

&jdbix_setlog('/tmp/dbixlogt.txt'); #OPTIONALLY, SET UP A LOG FILE.

#CONNECT TO A DATABASE.

my $dB = &new JDBIx("dbname,dbuser,dbpswd",{})
|| die "-no login: err=".&jdbix_err().':'.&jdbix_errstr."=\n");

$dB->package(__PACKAGE__); #UNLESS PACKAGE IS "main::".

&set_databasetype('Oracle');

&setproxy('remotehost.domain.com:8016'); #IF USING REMOTE DBI::Proxy.

$dB->{LongTruncOk} = 1; #ALLOW SILENT TRUNCATION!

#DO A SIMPLE SELECT, STORING THE RESULTS INTO @f1 AND @f2. THE 1ST RECORD #IS STORED INTO $f1 and $f2.

($res = $dB->select($dB, "select field1, field2 into :f1, :f2 from test"))
|| warn 'Could not do select ('.&jdbix_err().'.'.&jdbix_errstr().')!');

for (my $i=0;$i<=$res;$i++)

{

        print "-For record# $i: field1=$f1[$i], field2=$f2[$i]\n";

}

#ANOTHER SIMPLE SELECT, RETURNING THE RESULTS INTO @res.

@res = $dB->select("select field1, field2 from test");

for (my $i=0;$i<=$#res;$i++)

{

        print "\n-For record# $i: ";
        for (my $j=0;$j<=$#{$res[$i]};$j++)
        {
                print "value =$res[$i]->[$j],\t";
        }

}

#DO A VECTORIZED SELECT, SELECTING A RECORD FOR EACH KEY VALUE IN @f1.

$sqlstr = <<END_SQL;

        select field3, field4 into :f3, :f4
        from test2
        where field1 = /:f1

END_SQL

$res = $dB->do($sqlstr, 1);

#INSERT A NEW RECORD.

($res = $dB->do1($dB, 'insert into test values (?, ?, ?, ?)',
'value1', $value2, $value3, 'value4')) ||
die ('Could not insert record ('.&jdbix_err().'.'.&jdbix_errstr().')!');

#COMMIT THE TRANSACTION!

$dB->commit();

#CURSORS.

$sqlstr = <<END_SQL;

        update test set field1 = ?
        where field2 = ?

END_SQL

$csr = $dB->open($sqlstr);

die "Could not open ($sqlstr)!" unless ($csr);

#AN OPTIONAL 3RD ARGUMENT TO open CAUSES $dbh->execute() TO BE CALLED IN ADDITION TO $dbh->prepare(). IF THE RETURN VARIABLE IS A LIST, A SECOND VALUE IS RETURNED REPRESENTING THE RESULT RETURNED BY $dbh->execute. ALSO, IF USED FOR A SELECT STATEMENT, VARIABLES CAN BE BOUND JUST AS FOR select (see ":f1" and ":f2" in prev. examples).

for (my $i=0;$i<=$#f1;$i++)

{

        $dB->bind($csr, $i, $f1[$i]);

}

$dB->close($csr);

#AN EXAMPLE OF SELECT USING CURSORS.

$sqlstr = <<END_SQL;

        select field3, field4
        from test2
        where field1 = ?

END_SQL

$csr = $dB->open($sqlstr);

die "Could not open ($sqlstr)!" unless ($csr);

for (my $i=0;$i<=$#f1;$i++)

{

        $dB->bind($csr, $f1[$i]);
        while (($f3, $f4) = $dB->fetch($csr))
        {
                print "-For record# $i (key $f1[$i]): field3=$f3, field4=$f4\n";
        }

}

$dB->close($csr);

#DISCONNECT FROM THE DATABASE.

$dB->disconnect();


TODO

        Make a more object-oriented version.


KNOWN BUGS

-none (yet)-


SEE ALSO

DBI(3), perl(1)