database - DBD::SQLite::db 准备失败:没有这样的表 Perl

标签 database perl dbi

我创建了一个 SQLite 数据库和一个名为“COMPANY”的表。

我的意图是创建一个模块 (Connect.pm),它支持 DataBase Handler ($dbh),它是与数据库的连接,并带有对象创建后,我可以调用 Connect.pm 中可用的插入方法。

当我尝试将数据插入数据库时​​,出现以下错误:

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.

连接.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();

我可以使用这个程序来创建数据库并查询它,这很有效。

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;

最佳答案

你模块中的DSN是错误的:“DBI:$driver:dbname:$database”应该是“DBI:$driver:dbname=$database”(dbname后面应该有一个等号,而不是冒号)。 ThisSuitIsBlackNot 于 1 月 10 日 15:57 发布是正确答案...

关于database - DBD::SQLite::db 准备失败:没有这样的表 Perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550066/

相关文章:

c# - 使用 .Number 捕获 mysql 异常

php - 具有连接和聚合值的 MYSQL Group By

mysql - 在 perl DBD::mysql 中使用 --login-path=local

Web应用程序的Mysql数据库结构

sql - 如何找到类似的地址记录?

perl - 如何在Perl中检查文件系统中一个路径是否存在于另一路径下?

perl - 更优雅的方式来构造 SQL 添加 WHERE 和使用占位符

sql-server - 使用 DBI 连接到 SQL Server

perl - 如何停止 perl 缓冲 ffmpeg 输出

perl - 使用 Test::More 和 Test::Deep 打印失败的子测试