使用Postgres和Mysql的数据库/ sql包和驱动程序我希望实现以下目标。我希望能够选择一行,并知道有零行,一行或多行。 QueryRow函数没有达到这个目的,因为据我所知,无论是否有多行,它都会返回一行而不会出错。对于我的情况,不止一行可能是错误的,我想知道它。我想创建一个通用函数来执行此操作。
我看着创建一个使用查询函数的函数,但我不知道如何返回第一行,如果有多个行。我想返回有多行的事实,但我也想返回第一行。要确定有多行,我必须执行Next,并覆盖第一行。很显然,我可以在不创建通用功能的情况下实现此功能,但是我想要一个功能来实现这一功能,因为我需要在多个位置执行此操作。
有人请向我解释如何实现此目的。 IE浏览器。当一个成功的Next完成或Next没有返回任何东西时,从函数返回第一行。Sql Select - 返回的总行数
2
A
回答
1
我正在使用database/sql
& MySQLDriver
来实现此目的。您可以在https://github.com/go-sql-driver/下载MySQLDriver
。
我自己写了execQuery
函数来从数据库中获取一行或多行。它基于MySQL,但我认为它也可以用于具有类似工具的Postgres。
假设您有一个名为test
的数据库表,并且具有名为id
,name
,age
的行。
代码:
var db *sql.DB // it should be initialized by "sql.Open()"
func execQuery(SQL string, args ...interface{}) (rows *sql.Rows, is_succeed bool) {
rows, err := db.Query(SQL, args...)
var ret bool
if err == nil && rows != nil { // if DB query error rows will be nil, it will return false
ret = true
} else {
ret = false
}
return rows, ret
}
用法:
var name, age string
rows, is_succeed = execQuery("SELECT `name`, `age` FROM `test` WHERE `id` = ?", "123")
if !is_succeed {
// error
return
}
for rows.Next() { // if have zero result rows, this for route won't execute
err := rows.Scan(&name, &age)
// check if has error & do something
}
如果你想知道多少行怎么回来了,只是在for
路线添加计数器,可以使用SQL也可以做到这一点。
sql.Rows
喜欢列表结构,rows *sql.Rows
返回第一行的点。使用rows.Next()
来遍历每一行。我想这就是你问的。
如果你真的想知道行数非常时候,使用缓存技工像memcacheDB
或Redis
或只是实现一个简单的计数器自己可以帮你解决这个问题。
相关问题
- 1. SQL SELECT *只返回一行
- 2. c select()函数总是返回1
- 3. 行数函数总是返回NULL
- 4. 单SQL SELECT返回从一个表行
- 5. ExecuteNonQuery for SELECT sql语句不返回行
- 6. SQL Server搜索,如何返回行数的总数?
- 7. SQL Server函数总是返回NULL
- 8. 在SQL中计算返回的行的总数
- 9. SQL SELECT COUNT(*)有时会返回数据
- 10. 从表中返回总行数
- 11. 计算select查询返回的行数
- 12. 函数SELECT返回SQL SERVER 2012中的一行
- 13. SELECT FOR UPDATE返回零行
- 14. 准备SELECT语句执行但总是返回0行
- 15. SQL:对SELECT语句返回的行进行编号
- 16. Select-String返回多行
- 17. 从CockroachDB中的`SELECT`返回随机行
- 18. 函数总是返回null
- 19. SQL总行数
- 20. Oracle SQL返回多个表的总和
- 21. 来自Select count(*)的SQL返回码
- 22. SQL SELECT与总和
- 23. INSERT或SELECT策略总是返回一行?
- 24. select语句返回附加行
- 25. Mysql结果总是在SELECT ... FROM(SELECT ...)中返回NULL
- 26. SQL总是返回上一大桌
- 27. pdo select语句不返回行
- 28. SELECT DISTINCT总和的SQL Server
- 29. 如何替换返回多行的Sql Select中的值?
- 30. 返回一个值(而不是总数)的SQL计数
感谢您的回答。我想要实现的基本上是知道有多少行返回。 MySql有一种实现方式(它不适用于我),但是Postgres显然没有。我的第二选择是知道是否有多行。如果还有第二行,则第一行将被“下一个”覆盖,我猜测第二行。总之,我想知道的是以下所有内容。是否有一排?b。是否有多行? C。我不管第一排。 d。理想情况下,我想知道行数,但我认为重复Nexts效率低下。 – 2013-04-24 05:15:04
在内存中执行列表结构遍历比SQL查询更有效。您还可以通过几行代码找到所有问题的答案,这比更复杂的解决方案要容易得多。但是,使用'rows.Next()'似乎是'database/sql'现在提供的唯一解决方案,或者使用缓存机制。 – 2013-04-24 05:44:41