SQLiteデータベースと 'COMPANY'という名前のテーブルを作成しました。DBD :: SQLite :: db prepare failed:そのようなテーブルがありませんPerl
私の意図は、データベースへの接続であるモジュールデータベースハンドラ($のDBH)を祝福(Connect.pm)を作成することで、オブジェクトが作成されて、私は、Insertメソッドを呼び出すことができていますConnect.pmで利用可能です。
私はデータベースにデータを挿入しようとすると、それはエラーの下に私を与えている:
temp.plDBD::SQLite::db prepare failed: no such table: COMPANY at temp.pl line 6.
DBD::SQLite::db prepare failed: no such table: COMPANY at temp.pl line 6.
Connect.pm
package Connect;
use strict;
use DBI;
use Data::Dumper;
sub new {
my $class = shift;
my $driver = "SQLite";
my $database = "WEBSITE.db";
my $dsn = "DBI:$driver:dbname:$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1}) or die $DBI::errstr;
my $self = { dbh => $dbh};
print STDERR "Opened database successfully\n";
bless $self, $class;
return $self;
}
sub insert {
my $self = shift;
my ($id, $firstName, $lastName, $email, $comment) = @_;
my $sth = $self->{ dbh }->prepare("INSERT INTO COMPANY VALUES (?, ?, ?, ?, ?)");
my $rv = $sth->execute($id, $firstName, $lastName, $email, $comment) or die $DBI::errstr;
my $value = "Inserted Successfully";
if($rv < 0){
$value = $DBI::errstr;
}
return $value;
}
1;
use DBI; use strict; use Connect; my $obj = Connect->new(); my $status = $obj->insert("002", "Test", "User", "a\@b.com", "Comment"); $obj->disconenct();
私はこのプログラムを使用してDBを作成し、それを照会することができます。
use DBI;
use strict;
my $driver = "SQLite";
my $database = "WEBSITE.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr;
my $sth = $dbh->prepare('INSERT INTO COMPANY VALUES (?, ?, ?, ?, ?)');
my $rv = $sth->execute("003", "Test", "User", "a\@b.com", "Test Comment") or die $DBI::errstr;
データベースを正しく作成しましたか?コマンドラインで 'sqlite3'を使うと、そこにテーブルがありますか? '.tables'コマンドを使って、そのユーティリティからデータベース内のすべてのテーブルを表示することができます。 – simbabque
いくつかの推測:1)データベースへの絶対パスを指定しないので、既存のものに接続するのではなく、作業ディレクトリに新規のパスが作成されています。 2)データベースやテーブル名の入力ミスをしました(実際の名前はCOMPANYではなく「Company」です)。 3)実際にテーブルを作成したことはありませんでした。 – ThisSuitIsBlackNot
お返事ありがとうございます。 – Ram