2017-01-09 5 views
1

Ich erstellte eine SQLite Datenbank und eine Tabelle namens 'COMPANY'.DBD :: SQLite :: db Vorbereiten fehlgeschlagen: keine solche Tabelle Perl

Meine Absicht ist es, ein Modul (Connect.pm), die den DataBase Handler ($ dbh), die die Verbindung zur Datenbank ist segnet zu erstellen und mit dem Objekt erstellt, kann ich die Insert-Methode aufrufen, die ist in Connect.pm verfügbar.

Wenn ich versuche, Daten einzufügen in die Datenbank, wird es mir die unten Fehler geben:

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; 

temp.pl

use DBI; 
use strict; 
use Connect; 

my $obj = Connect->new(); 
my $status = $obj->insert("002", "Test", "User", "a\@b.com", "Comment"); 

$obj->disconenct(); 

Ich kann dieses Programm verwenden, um die DB zu erstellen und abzufragen, die funktioniert.

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

Sind Sie sicher, dass Sie die Datenbank korrekt erstellt haben? Wenn Sie 'sqlite3' in der Befehlszeile verwenden, ist die Tabelle dort? Sie können den Befehl '.tables' verwenden, um alle Tabellen in der Datenbank von diesem Dienstprogramm aus anzuzeigen. – simbabque

+3

Einige Vermutungen: 1) Da Sie keinen absoluten Pfad zur Datenbank angeben, wird in Ihrem Arbeitsverzeichnis ein neuer erstellt, anstatt eine Verbindung zu dem vorhandenen herzustellen. 2) Sie haben einen Tippfehler in der Datenbank und/oder dem Tabellennamen gemacht (z. B. ist der tatsächliche Name "Firma", nicht "UNTERNEHMEN"). 3) Sie haben die Tabelle nie erfolgreich erstellt. – ThisSuitIsBlackNot

+0

Danke für Ihre Antwort. – Ram

Antwort

1

Das DSN in Ihrem Modul ist falsch: "DBI: $ Treiber: dbname: $ database" ": $ Treiber: DBI dbname = $ Datenbank" sein sollte (es sollte ein Gleichheitszeichen nach dbname, nicht ein Doppelpunkt). Gepostet von ThisSuitIsBlackNot Jan 10 um 15:57 Uhr ist die richtige Antwort ...

Verwandte Themen