golang連線postgres資料庫實現增刪改查 插入資料返回id
阿新 • • 發佈:2021-02-09
技術標籤:postgres
golang連線postgres資料庫實現增刪改查 插入資料返回id
import (
"database/sql"
"fmt"
"log"
_ "github.com/bmizerany/pq"
)
func queryFunc(){
// 查詢資料
rows, err := db.Query("SELECT * FROM info")
CheckErr(err)
for rows.Next() {
var id int
var name string
var addr string
var tel_no string
var other string
err = rows.Scan(&id, &name, &addr, &tel_no, &other)
CheckErr(err)
fmt.Println(id)
fmt.Println(name)
fmt.Println(addr)
fmt.Println(tel_no)
fmt.Println(other)
}
// 單條資料查詢
queryName := "tom"
var addr string
err := db.QueryRow(" select name,addr from info where name=$1", queryName).Scan(&price, &addr)
CheckErr(err)
fmt.Println(addr)
// 插入資料,不需要返回插入id的
stmt, errInsert := db.Prepare("INSERT INTO info(name,addr,tel_no,other) VALUES($1,$2,$3,$4)")
CheckErr(errInsert)
_, err = stmt.Exec("姓名", "地址", "13812345678", "other info")
CheckErr(err)
// 插入資料需要返回id的
// 在sql語句後面加上 RETURNING id
querySql := "INSERT INTO info (name, addr, tel_no, other) VALUES ($1,$2,$3,$4) RETURNING id"
err = db.QueryRow(querySql, "姓名", "地址addr","12312341234","otherInfo").Scan(&insertId)
CheckErr(err)
fmt.Println("顯示插入的id")
fmt.Println(insertId)
// 修改資料
stmt,err := db.Prepare("UPDATE info set name=$1 WHERE id=$2")
CheckErr(err)
_,err = stmt.Exec("mark",6)
CheckErr(err)
fmt.Println("udpate info success")
// 刪除資料
stmt,err := db.Prepare("DELETE FROM info WHERE id=$1")
CheckErr(err)
_,err = stmt.Exec(6)
CheckErr(err)
fmt.Println("delete form user_tbl success")
}
// err處理
func CheckErr(err error) {
if err != nil {
panic(err)
}
}
1.查詢多條資料時, 使用db.Qeury()
方法查詢, 如果有引數的話, 需要在Query()方法裡寫上, 其返回值需要通過遍歷的形式取出來
2.單條資料查詢或插入資料需要獲取插入id返回值
時, 需要使用db.QueryRow()
方法, 同樣引數需要在QueryRow()方法中寫上, 返回結果是一條資料, postgres獲取插入id需要使用RETURNING id
3.插入資料不需要返回值/修改資料/刪除資料等操作, 都可以使用db.Prepare()
方法, 通過stmt.Exec()
方法對引數進行賦值
插入資料時通過第三種方式進行插入的話, 是獲取不到返回值的, Exec()方法只能執行SQL語句, 獲取不到返回值, 只能獲取到影響的行數, 比如修改姓名為張三的資訊, 可能修改了8條資料, 這裡可以通過下面的形式獲取影響的行數
res,err = stmt.Exec(6)
id, err := res.RowsAffected()// 影響的行數
如果使用Exec()方法還要強行RETURNING id
, 想要通過LastInsertId()方法獲取插入的id, 那麼就會報錯
這就是沒有辦法接收返回值, 但是卻要強行返回資料的結果
unexpected data row returned in Exec, check your query
接下來資料庫使用就清清爽爽了!