为什么Go数据库库中只有两种查询类型?

时间:2012-09-21 16:21:16

标签: go

据我所知,Go database/sql接口库只需要两种类型的结果 - a rowarray of rows。但是,至少还有一种类型的结果 - 单列。

DB.column('SELECT COUNT(*) FROM `user` WHERE `banned` IS NOT NULL')

有没有办法解决这个问题 - 或者我是否只需要获取一行然后从中访问COUNT(*)

2 个答案:

答案 0 :(得分:2)

是的,你获取一列的行,但是那么难吗?

var count int
row := db.QueryRow("SELECT COUNT(*) FROM `user` WHERE `banned` IS NOT NULL")
err := row.Scan(&count)

请注意,如果您发现它太冗长(可能会删除行变量),则可能会压缩它。

我认为其他语言中的其他类似系统(例如JDBC)也没有提供本地快捷方式。

我发现我更容易处理一个我可以记忆和浏览的API而不是一个API,它拥有我可能愿意用来删除代码中一行的所有实用程序。

答案 1 :(得分:2)

对于记录,SQL Server存储过程将返回以下所有内容(同时):

  • 整数返回码
  • 包含文本和两个整数代码的零个或多个消息(通常是警告或错误)
  • 零个或多个命名的,键入的标量输出参数
  • 零个或多个“行集”,每个“行集”是零行或多行的有序列表。

在行集中,所有行都具有相同数量(一个或多个)命名的类型列。列名不必在行集中是不同的。

SQL Server无法识别任何特殊情况,例如具有单行或单列的单个行集;或单个输出参数。

其他数据库系统略有不同。