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...