Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何查询数据库,然后检查结果_Postgresql_Go - Fatal编程技术网

Postgresql 如何查询数据库,然后检查结果

Postgresql 如何查询数据库,然后检查结果,postgresql,go,Postgresql,Go,我需要检查我的查询是否返回true或false。如果它返回false,我希望它出错。这是我的密码: func (dr *dbrepo) checkIfUnique(datacenterstring) error { statement := `select exists(select 1 from source where datacenter = $3)` _, checkIfExists := dr.db.Query(statement) if checkIfExi

我需要检查我的查询是否返回true或false。如果它返回false,我希望它出错。这是我的密码:

func (dr *dbrepo) checkIfUnique(datacenterstring) error {
    statement := `select exists(select 1 from source where datacenter = $3)`

    _, checkIfExists := dr.db.Query(statement)
    if checkIfExists != nil {
        log.Print("Error  is not unique", checkIfExists)
        return checkIfExists
    }
    return nil
}
问题是:我想我需要将
checkIfExists
从一行转换为一个bool,然后看看它是真是假。但我不知道如何做到这一点。有什么想法吗?有更好的方法吗?

Query()
不会返回true或false。它返回两个值:
*行
&
错误

func (db *DB) Query(query string, args ...interface{}) (*Rows, error) {
    ...
}
在您的情况下:
checkIfExists
是错误。有了这个错误,您就可以知道查询成功或失败了。就像你做的那样:

if checkIfExists != nil {
    return checkIfExists
}

如果需要更多信息(例如查询检索到的行),则需要用变量替换
。我们将其称为
rows
,然后使用
rows.Scan()
将列中的数据复制到目标。有关更多信息,请参见
数据库/sql

“每次调用扫描,即使是第一次,都必须在调用下一次之前进行。”。对于具有单行的结果集,例如这一行,。我在查询中遇到的问题是,它要么返回t,要么返回f。因此,它将永远成功。如何使用rows.scan告诉我它是false?
var-exists-bool;err:=dr.db.QueryRow(语句、参数…).Scan(&exists);//检查错误,然后检查是否存在
。您的查询有一个参数占位符
$3
,但是您没有将任何参数传递给func,这将导致错误,而且您有一个占位符,但其序号是
3
而不是
1
,这很奇怪,并且无论传递多少参数,都可能导致错误。此外,切勿放弃从
查询
返回的
*sql.Rows
值,否则您的应用程序将耗尽连接。这是因为行值必须由调用方显式关闭。