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