2017-01-09 13 views
1

SQLiteデータベースと 'COMPANY'という名前のテーブルを作成しました。DBD :: SQLite :: db prepare failed:そのようなテーブルがありませんPerl

私の意図は、データベースへの接続であるモジュールデータベースハンドラ($のDBH)を祝福(Connect.pmを作成することで、オブジェクトが作成されて、私は、Insertメソッドを呼び出すことができていますConnect.pmで利用可能です。

私はデータベースにデータを挿入しようとすると、それはエラーの下に私を与えている:

temp.pl

DBD::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; 
+2

データベースを正しく作成しましたか?コマンドラインで 'sqlite3'を使うと、そこにテーブルがありますか? '.tables'コマンドを使って、そのユーティリティからデータベース内のすべてのテーブルを表示することができます。 – simbabque

+3

いくつかの推測:1)データベースへの絶対パスを指定しないので、既存のものに接続するのではなく、作業ディレクトリに新規のパスが作成されています。 2)データベースやテーブル名の入力ミスをしました(実際の名前はCOMPANYではなく「Company」です)。 3)実際にテーブルを作成したことはありませんでした。 – ThisSuitIsBlackNot

+0

お返事ありがとうございます。 – Ram

答えて

1

あなたのモジュール内のDSNは間違っている: "DBI:$ドライバ:DBNAME:$データベースは、"(dbnameの後に等号があるはず、ない ":$ドライバDBNAME = $データベースDBI" でなければなりませんコロン)。投稿者ThisSuitIsBlackNot Jan 10 at 15:57は正解です...

関連する問題