Postgresql 如何查询数据库,然后检查结果
我需要检查我的查询是否返回true或false。如果它返回false,我希望它出错。这是我的密码: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
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
值,否则您的应用程序将耗尽连接。这是因为行值必须由调用方显式关闭。