golang訪問mysql數據庫,增刪改查

需要的第三方包:

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

主要API:

  • sqlx.Open (driverName, dataSourceName string) (*DB, error)
    – driverName : 數據庫類型
    – dataSourceName : 數據庫信息
    – 返回一個數據庫實例和錯誤

  • func (db *DB) Exec(query string, args …interface{}) (Result, error)
    可以直接執行 增刪改 操作

  • func (db *DB) Select(dest interface{}, query string, args …interface{}) error
    查詢操作函數

建表語句:

CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=163 DEFAULT CHARSET=latin1;

代碼:

package main

import (
	"github.com/jmoiron/sqlx"
	_"github.com/go-sql-driver/mysql" //_ 代表初始化這個庫
	"fmt"
	"strconv"
)

//結構體變量首字母大寫,以便外部可修改成員變量
type person struct {
	Name string `db "name"`
	Age int `db "age"`
	Id int `db "id"`
}


func handleError(e error,msg string){
	if (e != nil){
		fmt.Println(e,msg)
	}
}
func main() {
	var ps []person
	db,err:=sqlx.Open("mysql","root:root@/web")
	handleError(err,"sqlx")
	defer db.Close()
	//刪除表數據
	db.Exec("delete from person")
	var last_id int64

	//insert 數據
	for i:= 0; i< 10 ;i++  {
		rst,_ := db.Exec(`insert into person (name ,age) values (? ,?)`, "zhangsan_"+strconv.Itoa(i+20), 20+i)
		a_num, _ := rst.RowsAffected()
		last_id, _ = rst.LastInsertId()
		fmt.Println("影響的行數:",a_num,"最後一條記錄的id爲:",last_id)
	}

	//修改數據
	db.Exec(`update person set name = "lisi" where id=?`, last_id)
	//查詢數據
	db.Select(&ps,"select name ,age,id from person")

	for _,unit_ps := range ps{
		fmt.Printf("name: %s,age: %d,Id :%d\n",unit_ps.Name,unit_ps.Age,unit_ps.Id)
	}

輸出:

影響的行數: 1 最後一條記錄的id爲: 153
影響的行數: 1 最後一條記錄的id爲: 154
影響的行數: 1 最後一條記錄的id爲: 155
影響的行數: 1 最後一條記錄的id爲: 156
影響的行數: 1 最後一條記錄的id爲: 157
影響的行數: 1 最後一條記錄的id爲: 158
影響的行數: 1 最後一條記錄的id爲: 159
影響的行數: 1 最後一條記錄的id爲: 160
影響的行數: 1 最後一條記錄的id爲: 161
影響的行數: 1 最後一條記錄的id爲: 162
name: zhangsan_20,age: 20,Id :153
name: zhangsan_21,age: 21,Id :154
name: zhangsan_22,age: 22,Id :155
name: zhangsan_23,age: 23,Id :156
name: zhangsan_24,age: 24,Id :157
name: zhangsan_25,age: 25,Id :158
name: zhangsan_26,age: 26,Id :159
name: zhangsan_27,age: 27,Id :160
name: zhangsan_28,age: 28,Id :161
name: lisi,age: 29,Id :162
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章