示例
使用 Go 语言连接 PostgreSQL 数据库并进行增删改查操作的步骤如下:
1. 安装必要的库
首先,你需要安装 pq 驱动,它是 Go 语言用于连接 PostgreSQL 数据库的库:
go get -u github.com/lib/pq
2. 连接到数据库
使用 sql.Open 函数连接到 PostgreSQL 数据库:
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func connectPgsql() *sql.DB {
//如果没有明确指定 `dbname` 参数,那么 `pq` 驱动默认会尝试连接到与 `user` 参数同名的数据库。
connStr := "user=postgres password=xxx dbname=mydatabase host=xxx port=xxx sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Successfully connected!")
return db
}
创建数据库和表
func TestPgsql() {
db := connectPgsql()
defer db.Close()
//createDb(db)
//创建表之前,要重新指定连接的数据库
createTable(db)
}
func createDb(db *sql.DB) {
_, err := db.Exec("CREATE DATABASE mydatabase")
if err != nil {
log.Fatal(err)
}
fmt.Println("Database created successfully!")
}
func createTable(db *sql.DB) {
query := `
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INT
)`
_, err := db.Exec(query)
if err != nil {
log.Fatal(err)
}
fmt.Println("Table created successfully!")
}
注意,datagrip可能隐藏了数据库
3. 增删改查操作
插入数据:
func insertData(db *sql.DB) {
sqlStatement := `
INSERT INTO users (name, age)
VALUES ($1, $2)
RETURNING id`
id := 0
err := db.QueryRow(sqlStatement, "John", 30).Scan(&id)
if err != nil {
panic(err)
}
fmt.Println("New record ID is:", id)
}
查询数据:
func queryData(db *sql.DB) {
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
var age int
err = rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%d: %s, %d\n", id, name, age)
}
}
更新数据:
func updateData(db *sql.DB) {
sqlStatement := `
UPDATE users
SET name = $2, age = $3
WHERE id = $1;`
_, err := db.Exec(sqlStatement, 1, "NewName", 31)
if err != nil {
panic(err)
}
}
删除数据:
func deleteData(db *sql.DB) {
sqlStatement := `
DELETE FROM users
WHERE id = $1;`
_, err := db.Exec(sqlStatement, 1)
if err != nil {
panic(err)
}
}
- 使用
现在,你可以在主函数中调用上述函数来进行数据库操作:
func main() {
db := connectToDatabase()
defer db.Close()
insertData(db)
queryData(db)
updateData(db)
deleteData(db)
}
注意:上述代码只是一个基本示例,实际应用中可能需要进行更多的错误处理和优化。