需要的第三方包:
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