1. 程式人生 > 其它 >golang連線postgres資料庫實現增刪改查 插入資料返回id

golang連線postgres資料庫實現增刪改查 插入資料返回id

技術標籤: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

接下來資料庫使用就清清爽爽了!