Golang中的数据库连接和操作:MySQL和PostgreSQL实例
Golang是一门非常流行的编程语言,它被广泛的应用于各种应用程序开发与运维中。在开发应用程序时,我们通常需要与数据库进行交互,本文将介绍如何在Golang中连接和操作MySQL和PostgreSQL数据库。
一、MySQL数据库连接与操作
1. 安装MySQL驱动
在Golang中连接MySQL,需要先安装MySQL驱动,我们可以通过以下命令进行安装:
```
go get -u github.com/go-sql-driver/mysql
```
2. 连接MySQL数据库
连接MySQL数据库需要使用database/sql包和go-sql-driver/mysql包,示例代码如下:
```
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 数据库连接信息
db, err := sql.Open("mysql",
"root:password@tcp(127.0.0.1:3306)/test")
if err != nil {
panic(err)
}
defer db.Close()
// 测试连接是否成功
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("连接成功")
}
```
3. 执行SQL操作
连接成功后,我们就可以通过sql.DB对象进行SQL操作了,示例代码如下:
```
// 查询
rows, err := db.Query("SELECT * FROM users")
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var (
id int
name string
age int
)
err = rows.Scan(&id, &name, &age)
if err != nil {
panic(err)
}
fmt.Println(id, name, age)
}
// 插入
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
if err != nil {
panic(err)
}
defer stmt.Close()
res, err := stmt.Exec("Tom", 20)
if err != nil {
panic(err)
}
id, err := res.LastInsertId()
if err != nil {
panic(err)
}
fmt.Println("插入成功,id=", id)
// 更新
stmt, err = db.Prepare("UPDATE users SET age=? WHERE name=?")
if err != nil {
panic(err)
}
defer stmt.Close()
res, err = stmt.Exec(21, "Tom")
if err != nil {
panic(err)
}
affected, err := res.RowsAffected()
if err != nil {
panic(err)
}
fmt.Println("更新成功,影响的行数=", affected)
// 删除
stmt, err = db.Prepare("DELETE FROM users WHERE name=?")
if err != nil {
panic(err)
}
defer stmt.Close()
res, err = stmt.Exec("Tom")
if err != nil {
panic(err)
}
affected, err = res.RowsAffected()
if err != nil {
panic(err)
}
fmt.Println("删除成功,影响的行数=", affected)
```
二、PostgreSQL数据库连接与操作
1. 安装PostgreSQL驱动
在Golang中连接PostgreSQL,需要先安装PostgreSQL驱动,我们可以通过以下命令进行安装:
```
go get -u github.com/lib/pq
```
2. 连接PostgreSQL数据库
连接PostgreSQL数据库需要使用database/sql包和lib/pq包,示例代码如下:
```
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func main() {
// 数据库连接信息
db, err := sql.Open("postgres",
"user=postgres password=password host=127.0.0.1 port=5432 dbname=test sslmode=disable")
if err != nil {
panic(err)
}
defer db.Close()
// 测试连接是否成功
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("连接成功")
}
```
3. 执行SQL操作
连接成功后,我们就可以通过sql.DB对象进行SQL操作了,示例代码如下:
```
// 查询
rows, err := db.Query("SELECT * FROM users")
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var (
id int
name string
age int
)
err = rows.Scan(&id, &name, &age)
if err != nil {
panic(err)
}
fmt.Println(id, name, age)
}
// 插入
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES($1, $2)")
if err != nil {
panic(err)
}
defer stmt.Close()
res, err := stmt.Exec("Tom", 20)
if err != nil {
panic(err)
}
id, err := res.LastInsertId()
if err != nil {
panic(err)
}
fmt.Println("插入成功,id=", id)
// 更新
stmt, err = db.Prepare("UPDATE users SET age=$1 WHERE name=$2")
if err != nil {
panic(err)
}
defer stmt.Close()
res, err = stmt.Exec(21, "Tom")
if err != nil {
panic(err)
}
affected, err := res.RowsAffected()
if err != nil {
panic(err)
}
fmt.Println("更新成功,影响的行数=", affected)
// 删除
stmt, err = db.Prepare("DELETE FROM users WHERE name=$1")
if err != nil {
panic(err)
}
defer stmt.Close()
res, err = stmt.Exec("Tom")
if err != nil {
panic(err)
}
affected, err = res.RowsAffected()
if err != nil {
panic(err)
}
fmt.Println("删除成功,影响的行数=", affected)
```
总结
通过以上示例代码,我们可以看出Golang连接和操作MySQL和PostgreSQL数据库的流程及方法。在实际应用中,我们需要根据项目的需求进行相应的配置和操作,避免发生意外错误。希望本文能为大家解决一些Golang连接数据库的问题。