go mysql連線 Go連線MYSQL

2021-10-17 12:38:45 字數 3428 閱讀 1289

go原生提供了連線資料庫操作的支援,在用 golang進行開發的時候,如果需要在和資料庫互動,則可以使用database/sql包。這是乙個對關係型資料庫的通用抽象,它提供了標準的、輕量的、面向行的介面。

在go中訪問資料庫需要用到sql.db介面:它可以建立語句(statement)和事務(transaction),執行查詢,獲取結果。

解釋一下匯入包名前面的"_"作用:

import 下劃線(如:import _ github/demo)的作用:當匯入乙個包時,該包下的檔案裡所有init()函式都會被執行,然而,有些時候我們並不需要把整個包都匯入進來,僅僅是是希望它執行init()函式而已。這個時候就可以使用 import _ 引用該包。

上面的mysql驅動中引入的就是mysql包中各個init()方法,你無法通過包名來呼叫包中的其他函式。匯入時,驅動的初始化函式會呼叫sql.register將自己註冊在database/sql包的全域性變數sql.drivers中,以便以後通過sql.open訪問。

執行資料庫操作之前我們準備一張表:

create table `user` (

`id` bigint(20) not null auto_increment,

`name` varchar(45) default '',

`age` int(11) not null default '0',

`***` tinyint(3) not null default '0',

`phone` varchar(45) not null default '',

primary key (`id`)

) engine=innodb auto_increment=3 default charset=utf8;

1. 初始化資料庫連線:

db, _ := sql.open("mysql", "root:123456@tcp(127.0.0.1:3306)/test")

//設定資料庫最大連線數

db.setconnmaxlifetime(100)

//設定上資料庫最大閒置連線數

db.setmaxidleconns(10)

//驗證連線

if err := db.ping(); err != nil , "")

//開啟資料庫,前者是驅動名,所以要匯入: _ "github.com/go-sql-driver/mysql"

db, _ = sql.open("mysql", path)

//設定資料庫最大連線數

db.setconnmaxlifetime(100)

//設定上資料庫最大閒置連線數

db.setmaxidleconns(10)

//驗證連線

if err := db.ping(); err != nil {

fmt.println("open database fail")

return

fmt.println("connnect success")

//查詢操作

func query() {

var user user

rows, e := db.query("select * from user where id in (1,2,3)")

if e == nil {

errors.new("query incur error")

for rows.next() {

e := rows.scan(user.***, user.phone, user.name, user.id, user.age)

if e != nil {

fmt.println(json.marshal(user))

rows.close()

db.queryrow("select * from user where id=1").scan(user.age, user.id, user.name, user.phone, user.***)

stmt, e := db.prepare("select * from user where id=?")

query, e := stmt.query(1)

query.scan()

func deleteuser(user user) bool {

//開啟事務

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()

//獲得上乙個insert的id

fmt.println(res.lastinsertid())

return true

func insertuser(user user) bool {

//開啟事務

tx, err := db.begin()

if err != nil {

fmt.println("tx fail")

return false

//準備sql語句

stmt, err := tx.prepare("insert into user (`name`, `phone`) values (?, ?)")

if err != nil {

fmt.println("prepare fail")

return false

//將引數傳遞到sql語句中並且執行

res, err := stmt.exec(user.name, user.phone)

if err != nil {

fmt.println("exec fail")

return false

//將事務提交

tx.commit()

//獲得上乙個插入自增的id

go mysql連線 使用 Go 連線資料庫

簡介 在 go 中連線資料庫的方式有很多,這裡我們選擇使用 orm 的方式,也就不用寫原生的 sql 語句了.go 的 orm 庫也有很多,這裡選擇了 gorm.安裝 gorm 啟動資料庫 資料庫選擇了最主流的 mysql.建立資料庫的方式有很多,為了便於清理,選擇使用 docker 建立資料庫.新...

qtp連線mysql 無驅動 QTP連線MySQL

1 安裝 connector odbc 2 檢視資料來源名稱 控制面板 管理工具 資料來源 odbc 新增 3 連線資料庫 dim conn,connstring 建立資料庫例項 set conn createobject adodb.connection 連線字串 connstring drive...

qtp連線mysql 無驅動 QTP連線MySQL

1 安裝 connector odbc 2 檢視資料來源名稱 控制面板 管理工具 資料來源 odbc 新增 3 連線資料庫 dim conn,connstring 建立資料庫例項 set conn createobject adodb.connection 連線字串 connstring drive...