我是Databse的新手。我在我的系统上安装了SQLite,并尝试运行PERL程序以插入数据库
用于创建数据库和表的SQLite命令
在命令提示符下,我迭代到SQlite目录并给出命令
sqlite3 one.db;
create table table1 (a int, b string);
它创建了一个数据库和表
我执行了后面的PERL程序
use strict;
use warnings;
use DBI;
use DBD::SQLite;
my $dbh = DBI->connect("dbi:SQLite:dbname=one.db","","") or die "cannot
connect";
my $sth = $dbh->prepare("INSERT INTO 'table1'
(Income, LAST_NAME )
values
('1000', 'poul')");
$sth->execute() or die $DBI::errstr;
$sth->finish();
$dbh->commit or die $DBI::errstr;
我收到以下错误
DBD::SQLite::st execute failed: no such table: table1 at DBI.txt line 14.
no such table: table1 at DBI.txt line 14.
收到IKEGAMI
的评论后,我将DBI->connect
更改为
my $dbh = DBI->connect
("dbi:SQLite:dbname=C:/Users/nitkumar/Downloads/sqllite/one.db","","
") or die "cannot connect";
我开始收到错误消息
DBI connect('dbname=C:/Users/nitkumar/Downloads/sqllite/one.db','',...) failed:
database disk image is malformed at DBI.txt line 8
cannot connect at DBI.txt line 8.
获得更多评论后,我使用
获得了该版本use DBD::SQLite;
warn $DBD::SQLite::VERSION;
warn $DBD::SQLite::sqlite_version;
我得到了output
1.37 at version.txt line 2.
3.7.12.1 at version.txt line 3.
我正在使用sqlite3
。我想版本
答案 0 :(得分:3)
one.db
可能不是您从命令行创建的数据库的路径。
如果您要求打开一个不存在的数据库,它会创建它。就像命令行工具一样。
例如,如果数据库的路径为c:\sqlite\one.db
,则可以使用
"dbi:SQLite:dbname=c:\\sqlite\\one.db"
或者可能
"dbi:SQLite:dbname=c:/sqlite/one.db"
答案 1 :(得分:3)
我希望您创建的one.db
与您的Perl脚本尝试访问的one.db
不同。确保您创建的one.db
与中运行Perl脚本的目录位于同一目录。
DBD :: SQLite将创建数据库文件(如果它不存在),因此可能发生的是您在一个目录中创建one.db
,然后从另一个目录执行Perl脚本,创建第二个{ {1}}在该目录中。
我通常在我的Perl脚本中进行SQLite表创建,这样就没有猜测,我可以在以后轻松地将我的db文件吹掉,一切都会自动完成:
one.db
此外,如果为db文件指定绝对路径,您会发现事情会更好。您可以相对于$dbh->do(q[
CREATE TABLE IF NOT EXISTS table1 (
a int,
b string
)
]);
目录或脚本的目录创建它。我会推荐后者:
$ENV{HOME}
最后,使用use FindBin qw( $Bin );
my $dbh = DBI->connect("dbi:SQLite:dbname=$Bin/one.db","","")
!编写样板以检查是否存在错误是浪费您的时间,而您总是会忘记某些事情。所以,这样做:
RaiseError
然后你可以停止进行所有my $dbh = DBI->connect("dbi:SQLite:dbname=$Bin/one.db","","", {RaiseError => 1});
次检查。