使用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. SQL SELECT *只返回一行
- 3. SQL(Sybase)返回計算行的總和
- 4. c select()函數總是返回1
- 5. mysql返回每個user_id的行總數
- 6. 行數函數總是返回NULL
- 7. PL/SQL函數幫助返回總數
- 8. ExecuteNonQuery for SELECT sql語句不返回行
- 9. 檢查SQL SELECT語句不返回行
- 10. PL/SQL select返回多個行
- 11. 單SQL SELECT返回從一個錶行
- 12. SQL Server搜索,如何返回行數的總數?
- 13. SQL Server函數總是返回NULL
- 14. 在SQL中計算返回的行的總數
- 15. PDO select select只返回第一行
- 16. SQL CASE SELECT返回字符
- 17. 返回select語句SQL
- 18. SQL SELECT COUNT(*)有時會返回數據
- 19. 返回受SQL事務總行
- 20. 從表中返回總行數
- 21. MySQL的行數總是返回false
- 22. 查詢返回的行數和SELECT
- 23. 計算select查詢返回的行數
- 24. ADO.NET SQL Server select存儲過程可能返回的行數
- 25. 函數SELECT返回SQL SERVER 2012中的一行
- 26. SELECT FOR UPDATE返回零行
- 27. 2個日期之間的返回行數總是返回0
- 28. SQL INSERT INTO SELECT並返回SELECT數據以創建行視圖計數
- 29. 從函數返回總和
- 30. 值總是返回0,它應該返回插入的行數
感謝您的回答。我想要實現的基本上是知道有多少行返回。 MySql有一種實現方式(它不適用於我),但是Postgres顯然沒有。我的第二選擇是知道是否有多行。如果還有第二行,則第一行將被「下一個」覆蓋,我猜測第二行。總之,我想知道的是以下所有內容。是否有一排?b。是否有多行? C。我不管第一排。 d。理想情況下,我想知道行數,但我認爲重複Nexts效率低下。 – 2013-04-24 05:15:04
在內存中執行列表結構遍歷比SQL查詢更有效。您還可以通過幾行代碼找到所有問題的答案,這比更復雜的解決方案要容易得多。但是,使用'rows.Next()'似乎是'database/sql'現在提供的唯一解決方案,或者使用緩存機制。 – 2013-04-24 05:44:41