使用SQLite3从Perl在数据库中创建表

时间:2013-04-05 01:19:07

标签: database perl sqlite cpan dbi

我在使用dbi sqlite3使用Perl创建的数据库中创建表时遇到问题。使用下面的代码,我希望表包含端口探测器,每个源ip和端口一行。我不知道如果我正确地做到了,下面的代码由于某种原因不起作用,任何帮助将不胜感激。我的代码如下。

#!/usr/bin/perl

use strict;
use DBI;

my $dbh = DBI->connect(          
    "dbi:SQLite:dbname=test.db", 
    "",
    "",
    { RaiseError => 1}
) or die $DBI::errstr;


$dbh->do(CREATE TABLE probes (
  source CHAR(15) NOT NULL,
  port CHAR(5) NOT NULL,
  PRIMARY KEY (source,port)) );


$dbh->disconnect();

2 个答案:

答案 0 :(得分:1)

您还应该在每个程序的顶部都有use warnings

您需要为do方法提供SQL字符串。通常使用 here document 来编写多行字符串,如下所示。

$dbh->do(<<'END_SQL');
CREATE TABLE probes (
    source CHAR(15) NOT NULL,
    port CHAR(5) NOT NULL,
    PRIMARY KEY (source, port) )
END_SQL

请注意,END_SQL行不能在行的开头或结尾包含任何空格。

答案 1 :(得分:1)

你忘了引用$dbh->do的论点。有many种方法可以做到这一点。

$dbh->do( "CREATE TABLE probes ( ..." );
$dbh->do( 'CREATE TABLE probes ( ...' );
$dbh->do( qq[ CREATE TABLE probes ( ... ] );
$dbh->do( <<"END_SQL" );
CREATE TABLE probes (
   ...
END_SQL

已添加:要解决此问题,您只需在$dbh->do函数调用中添加引号。

$dbh->do("CREATE TABLE probes (
  source CHAR(15) NOT NULL,
  port CHAR(5) NOT NULL,
  PRIMARY KEY (source,port))");