Go教程

Go语言连接数据库

本文主要是介绍Go语言连接数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、安装驱动

go get github.com/go-sql-driver/mysql

二、导入需要的包

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

三、连接数据库

// "用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/book_manager?charset=utf8")
if err!=nil {
   fmt.Println(err)
   return
}   

四、查询表数据

//表结构
type info struct {
    id int `db:"id"`
    name string `db:"name"`
    author string `db:"author"`
}   
//查询表
rows,err:=db.Query("SELECT * FROM book")
if err!=nil {
   fmt.Println(err)
   return
} 

//遍历打印
for rows.Next(){
    var s info
    err=rows.Scan(&s.id,&s.name,&s.author)
    fmt.Println(s)
}
//用完关闭
rows.Close()

五、插入数据

//执行MySql语句
result,err:=db.Exec("INSERT INTO book(id,name,author)VALUES (?,?,?)",2,"将进酒","李白")

if err != nil {
    panic(err)
}   
fmt.Println(result)

// 查询数据
rows,err:=db.Query("SELECT * FROM book")
for rows.Next(){
    var s info
    err=rows.Scan(&s.id,&s.name,&s.author)
    fmt.Println(s)
}   

rows.Close()
} 

六、删除数据

db.Exec("DELETE FROM book where id=?", 2)

// 查询数据
rows,err:=db.Query("SELECT * FROM book")
for rows.Next(){
    var s info
    err=rows.Scan(&s.id,&s.name,&s.author)
    fmt.Println(s)
}

七、事务的使用

通过db.Begin()来开启一个事务,Begin方法会返回一个事务对象Tx。在结果变量Tx上调用Commit()或者Rollback()方法会提交或回滚变更,并关闭事务。在底层,Tx会从连接池中获得一个连接并在事务过程中保持对它的独占。事务对象Tx上的方法与数据库对象sql.DB的方法一一对应,例如Query,Exec等。事务对象也可以准备(prepare)查询,由事务创建的准备语句会显式绑定到创建它的事务。

//开启事务
tx, err := DB.Begin()
if err != nil {
    fmt.Println("tx fail")
}
//准备sql语句
stmt, err := tx.Prepare("DELETE FROM user WHERE id = ?")
if err != nil {
    fmt.Println("Prepare fail")
    return false
}
//设置参数以及执行sql语句
res, err := stmt.Exec(user.id)
if err != nil {
    fmt.Println("Exec fail")
    return false
}
//提交事务
tx.Commit()

完整查询数据代码

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/book_manager?charset=utf8")
    if err!=nil {
        fmt.Println(err)
        return
    }

	type info struct {
		id int `db:"id"`
		name string `db:"name"`
		author string `db:"author"`
	}
	rows,err:=db.Query("SELECT * FROM book")
	if err!=nil {
   		fmt.Println(err)
   		return
	} 

	for rows.Next(){
		var s info
		err=rows.Scan(&s.id,&s.name,&s.author)
		fmt.Println(s)
	}
	rows.Close()
}
这篇关于Go语言连接数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!