2016-06-14 96 views
1

記錄我使用this driver從去PSQL溝通。現在,當我發出更新查詢時,我無法知道它是否實際更新了任何內容(如果此ID不存在,它可以更新0行)。如何檢查是否PSQL成功更新圍棋

_, err := Db.Query("UPDATE tags SET name=$1 WHERE id=1", name) 

我試圖調查變量ERR(在doc提出了Insert語句的方式):

if err == sql.ErrNoRows { 
    ... 
} 

但是,即使不存在ID,ERR仍然是零。

我還試圖用QueryRow與返回的條款:

id := 0 
err := Db.QueryRow("UPDATE tags SET name=$1 WHERE id=1 RETURNING id", name).Scan(&id) 

但是這一次無法掃描& ID時,ID = 1是不存在於數據庫中。


那麼什麼是規範的方式來檢查我的更新是否更新了什麼?

+0

[MySQL的插入浮點32和Float64轉到](的相關/可能重複http://stackoverflow.com/questions/33751165/mysql -insert-FLOAT32-和float64,去) – icza

回答

5

嘗試使用db.Exec()代替db.Query()對於不返回結果的查詢。而不是返回sql.Rows對象(沒有一種方法來檢查有多少行受到影響)中,它返回一個sql.Result對象,它有一個方法RowsAffected() (int64, error)。這將返回查詢中的任何寫入操作(受到Exec()調用的影響(插入,刪除,更新))的行數。

請注意,如果您的查詢不直接影響任何行,但只能通過子查詢這樣做,受子查詢中的行不會被算作影響該方法調用行。

此外,作爲方法的評論指出,這並不對所有數據庫類型的工作,但我知道它的工作原理與pq一個事實,因爲我們正在使用的驅動程序自己(和使用RowsAffected()法) 。

參考鏈接: