Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

DBI driver name from database handle

by liz (Monsignor)
on Oct 20, 2003 at 14:42 UTC ( #300599=perlquestion: print w/ replies, xml ) Need Help??
liz has asked for the wisdom of the Perl Monks concerning the following question:

Is there an official way to obtain the driver name from a DBI database handle (object of type "DBI::db")?

Suppose I have a class method in an external module:

package External; sub dbh { $External::dbh ||= DBI->connect( 'DBI:mysql:test','root','' +) } #dbh

Now, after I obtain the database handle, I want to know which subclass of my own module I would need to bless an object with. Ideally:

package Foo; sub new { my $dbh = External->dbh; # how we get the $dbh is not the question + here my $driver = $dbh->SOMETHING; # now set to 'mysql', but what is "S +OMETHING" ? bless {},__PACKAGE__.'::'.$driver; } sub general { same for all database drivers }

and of course, I would then have a module Foo::mysql:

package Foo::mysql; @ISA = qw(Foo); sub specific { stuff specific to MySQL }

I can't find any easy way to do this, apart from possibly trying to do a query of some sort and inspect the class of the statement handle. If that would to be the way to do it, what would be an SQL statement that would work with all possible database drivers?

Liz

Update:
Thanks to 3dan and Abigail-II:

$dbh->{Driver}{Name}; # gives "mysql" $dbh->get_info( 17 ); # gives "MySQL"

The appropriate doc (which is indeed in DBI, but which I didn't find):

"Driver" (handle)
Holds the handle of the parent driver. The only recommended use for this is to find the name of the driver using:
             $dbh->{Driver}->{Name}

"Name" (string)
Holds the "name" of the database. Usually (and recommended to be) the same as the ""dbi:DriverName:..."" string used to connect to the database, but with the leading ""dbi:DriverName:"" removed.

Comment on DBI driver name from database handle
Select or Download Code
Re: DBI driver name from database handle
by edan (Curate) on Oct 20, 2003 at 15:00 UTC

    $dbh->{Driver}{Name}

    --
    3dan

Re: DBI driver name from database handle
by Abigail-II (Bishop) on Oct 20, 2003 at 15:02 UTC
    Would
    $dbh -> {Name}
    provide the information you are after? If not, does
    $dbh -> get_info (17)
    ?

    Abigail

      $dbh->{Name} gives me the name of the database, rather than the database driver.

      3dan's way seems to be the correct one $dbh->{Driver}{Name}.

      Of course, when you try to do a each on the $dbh object, you don't get a listing of the possible values. Too bad.

      Liz

      Would
      $dbh -> {Name}
      provide the information you are after?

      No.

      $dbh -> {Name} provides the name of the database used in the connection string.

      From DBI docs

      ""Name"" (string) Holds the "name" of the database. Usually (and recom­ mended to be) the same as the ""dbi:DriverName:..."" string used to connect to the database, but with the leading ""dbi:DriverName:"" removed.
Re: DBI driver name from database handle
by Anonymous Monk on Mar 05, 2009 at 11:28 UTC
    A programmer needs a specific driver to connect to a specific database, the following table list some of the popular drivers. Driver RDMS oracle.jdbc.driver.OracleDriver ORACLE com.mysql.jdbc.Driver MySQL com.sybase.jdbc.SybDriver Sybase com.microsoft.jdbc.sqlserver.SQLServerDriver SQL Server com.ibm.db2.jdbc.net.DB2Driver DB2 org.hsqldbJdbcDriver HSQL DB Thanks Samit Katiyar

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://300599]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2014-10-23 03:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (123 votes), past polls