当sqlite返回多行时,如何获得结果列表?

时间:2009-12-24 17:37:32

标签: regex perl sqlite

这就是我的表格:

key | driver  | machine     | result
-----------------------------------
1   | 1234    | abc_machine | pass
2   | 1234    | xyz_machine | fail

当用户从驱动程序中选择“1234”时,所有来自机器的东西都会变得有点混乱。 (用户从gui中选择)

当我这样做时:

$getConfig = `sqlite3 abc.db "SELECT machine FROM $table_name WHERE driver='$drvrSel'"`;

它给了我abc_machine xyz_machine

我尝试使用split(/ /, $getConfig)分隔它们,但不起作用。

谢谢。

如果我在错误的地方提出这个问题,我很抱歉。我试着寻找合适的地方,却找不到它。

5 个答案:

答案 0 :(得分:5)

#!/usr/bin/perl

use DBI;
use strict;

my $dbargs = {AutoCommit => 0, PrintError => 1};

my $dbh = DBI->connect("dbi:SQLite:dbname=test.db","","",$dbargs);
my $sth = $dbh->prepare("SELECT machine FROM test WHERE driver = 1234");
$sth->execute();

my @data;

while (@data = $sth->fetchrow_array()) {
    print $data[0] . "\n";
}

$sth->finish;
$dbh->disconnect;

答案 1 :(得分:2)

您应该使用DBI

,而不是调用SQLite程序

顺便说一下:

perl -MData::Dumper -e '$_="abc_machine xyz_machine";print Dumper split / /;'
  

$ VAR1 ='abc_machine';
  $ VAR2 ='xyz_machine';

因此,请再次检查$getConfig中包含的数据。

答案 2 :(得分:0)

那里可能有一个隐藏的标签或换行符。查看字符串之间空字符的ascii值,并在拆分调用中使用它。

答案 3 :(得分:0)

实际上sqlite3支持两个可能对您有用的命令行选项:-list(分隔符为'|')和-csv用于csv文件。有关详细信息,请参见sqlite3的手册页。然后,您可以拆分分隔符或使用Text :: CSV_XS分隔各个字段

根据下面的Rashids评论,我明显误解了你的问题。我的错。这是一种方法:

my $result = `sqlite3 dbname "query"`;
$result =~ s/\n/ /gs;

答案 4 :(得分:-1)

好吧,伙计们,我找到了......

\ W匹配任何非“单词”字符

`@setConfig = split(/\W/, $getConfig);`

这很好地分为:

$ setConfig [0] = abc_machine $ setConfig [1] = xyz_machine

谢谢大家。