The following code works for me. It has the following differences:
- It uses DBD::SQLite, where you use DBD::mysql
- I didn't test out putting the whole stuff into two separate files.
One thing that comes to mind: Did you install the proper Class::DBI subclass (Class::DBI::mysql) ?
Table setup script
#!/usr/bin/perl -w
use strict;
use DBI;
my $dbh = DBI->connect('dbi:SQLite:dbfile=kudra.sqlite',"","", {AutoCo
+mmit => 0});
my @statements;
{
local $/;
@statements = split /;/, <DATA>;
};
for my $statement (@statements) {
print "$statement\n";
eval {
$dbh->do($statement);
$dbh->commit;
};
$@ ||= $dbh->errstr;
if ($@) {
if ($statement =~ /^drop/i) {
warn $@;
} else {
die $@;
};
};
};
$dbh->commit;
$dbh->disconnect;
__DATA__
create table person (
id INTEGER PRIMARY KEY,
name VARCHAR(256)
);
insert into person (name) values ("Corion");
insert into person (name) values ("Kudra");
insert into person (name) values ("vroom");
insert into person (name) values ("jcwren");
Class::DBI script
#!/usr/local/bin/perl -w
package MyCompany::MyProduct::Database;
use Class::DBI::Loader;
my $loader = Class::DBI::Loader->new(
dsn => "dbi:SQLite:dbfile=kudra.sqlite",
user => "username",
password => "password",
namespace => 'MyCompany::MyProduct::Database',
relationships => 1);
package main;
use strict;
use warnings;
#use MyCompany::MyProduct::Database;
use Data::Dumper;
my $person =
MyCompany::MyProduct::Database::Person->retrieve(3);
print Dumper $person;