VScode用Go语言连接postgreSQL数据库并实现增删查改操作

740 阅读1分钟

本次使用到的工具是VScode,此外还有Go语言和PG数据库,请自行下载并配置环境。

首先要设置驱动

以下是Go实现的支持PostgreSQL的驱动,因为国外很多人在开发中使用了这个数据库。

 这里用到第一个链接提供的安装指令,在终端输入指令如下安装驱动:

go get github.com/lib/pq

ps:如果你遇到了类似网站长时间无法响应的问题,那么应该是国内网络问题,需要在命令行调整go的配置如下:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

然后使用 go env 命令查看配置信息

GO111MODULE和GOPROXY变为以上设置值则设置成功。

安装驱动后import _ "github.com/lib/pq"(匿名加载)连接PG数据库如下:

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/lib/pq"
)

var db *sql.DB

func sqlOpen() {
	var err error
	db, err = sql.Open("postgres", "port=5432 user=postgres password=postgres dbname=GolangTest01 sslmode=disable")
        println("连接成功!")
        //port端口号,默认是5432;

	//或者这种方式打开
	//db, err := sql.Open("postgres", "postgres://pqgotest:postgres@localhost/pqgotest?sslmode=verify-full")
	if err != nil {
		panic(err)
	}
}

func sqlInsert() {
	//插入数据
	stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
	checkErr(err)

	res, err := stmt.Exec("eren", "调查团", "2004-03-09")

	checkErr(err)

	affect, err := res.RowsAffected()
	checkErr(err)

	fmt.Println("rows affect:", affect)
}

func sqlDelete() {
	//删除数据
	stmt, err := db.Prepare("delete from userinfo where username=$1")
	checkErr(err)

	res, err := stmt.Exec("eren")
	checkErr(err)

	affect, err := res.RowsAffected()
	checkErr(err)

	fmt.Println(" Delete : rows affect:", affect)
}

func sqlSelect() {
	//查询数据
	rows, err := db.Query("SELECT * FROM userinfo")
	checkErr(err)

	println("-----------")
	for rows.Next() {
		var uid int
		var username string
		var department string
		var created string
		err = rows.Scan(&uid, &username, &created, &department)
		checkErr(err)
		fmt.Println("|uid = ", uid, "	name = ", username, "	dep = ", department, "	created = ", created, "-----------")
	}
}

func sqlUpdate() {
	//更新数据
	stmt, err := db.Prepare("update userinfo set username=$1 where uid=$2")
	checkErr(err)

	res, err := stmt.Exec("王大", 8)
	checkErr(err)

	affect, err := res.RowsAffected()
	checkErr(err)

	fmt.Println("rows affect:", affect)
}


func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}


func main() {

        sep := "----------"
	sqlOpen()
	println(sep, "*sqlOpen")

	sqlSelect()//查
	println(sep, "*sqlSelect")

	sqlInsert()//增
	sqlSelect()
	println(sep, "*sqlInsert")

	sqlUpdate()//改
	sqlSelect()
	println(sep, "*sqlUpdate")

	sqlDelete()//删
	sqlSelect()
	println(sep, "*sqlDelete")
        
	db.Close()
	println(sep, "*sqlClose")
}