如何确保查询成功执行

时间:2013-03-30 19:37:31

标签: perl dbi

我需要执行select语句查询并捕获返回的结果并将其存储在变量中。

执行没有返回任何数据。我检查了我的连接是否正确,因为它没有返回任何错误。

  

$ dbh = DBI-> connect($ data_source,$ username,$ password)              或者死掉$ DBI :: errstr;

以下是我的查询

my $sth = $dbh->prepare('select abc from pqr');
$sth->execute();

现在我正在检查它是否有一些数据

if($sth->rows) {
    print "We have data!\n";
} else {
    print"No Data";
}

始终打印No Data

用于获取我正在使用的数据

while(my @data = $sth->fetchrow_array()) {
    print "$data[1]\n";
}
$dbh->disconnect;

我没有收到任何数据。 任何人都可以建议我这里有什么问题吗? Same Query用Java给我想要的结果。

2 个答案:

答案 0 :(得分:1)

根据DBI docs

  

$ rv = $ sth-> rows;

     

返回受上一行影响命令影响的行数,   如果行数未知或不可用,则返回-1。

     

通常,在非SELECT执行后,您只能依赖行计数   (对于某些特定操作,如UPDATE和DELETE),或之后   获取SELECT语句的所有行。

写下你的:

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

要求行的第二个([1])元素对您的查询没有意义。

答案 1 :(得分:1)

如果您没有处理大型结果集,那么获取所有内容会更快一些

my $rows = $db->selectall_arrayref(qq|Select abc from def|) or die "Can't select " . $db->errstr();
if (@$rows) {
    print "I have rows";
    foreach my $row (@$rows) {
        # do something with $row->[0]
    }
} else {
    print "I did not get any rows/data";
}

另一种做法