2017-12-28 15:17:31
Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常 用的有如下几种:
- https://github.com/Go-SQL-Driver/MySQL 支持database/sql,全部采用go写。
- https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采用go写。
- https://github.com/Philio/GoMySQL 不支持database/sql,自定义接口,全部采用go写。
接下来的例子主要以第一个驱动为例,也推荐大家采用它,主要理由:这个驱动比较新,维护的比较好,完全支持database/sql接口 支持keepalive,保持长连接。
package main import ( "database/sql" "fmt" _ "github.com/Go-SQL-Driver/MySQL" "os" ) func checkErr(err error) { if err != nil { fmt.Println("Error is ", err) os.Exit(-1) } } // sql.Open()函数用于打开数据库驱动,Go-SQL-Driver中注册了mysql这个数据库驱动,第二个参数是DNS,配置数据库信息 // db.Prepare()函数用来返回准备要执行的sql操作,返回准备完毕状态 // db.Query() 函数用来直接执行Sql返回Rows结果 // stmt.Exec() 函数用来执行stmt准备好的SQL func main() { // sql.Open("mysql", "用户名:密码@tcp(IP:端口)/数据库?charset=utf8") db, err := sql.Open("mysql", "root:xxxxx@tcp(xxxxxxxx:3306)/test?charset=utf8") checkErr(err) fmt.Println("链接数据库test") //插入 stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?") checkErr(err) res, err := stmt.Exec("XXXXX", "Gopher", "2012-12-09") checkErr(err) id, err := res.LastInsertId() checkErr(err) fmt.Println(id) //更新数据 stmt, err := db.Prepare("update userinfo set username=? ,departname=? where id=?") checkErr(err) res, err := stmt.Exec("testusername", "testdepartname", id) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println(affect) //查询数据 rows, err := db.Query("select * from userinfo") checkErr(err) for rows.Next() { var id int var username string var departname string var created string err = rows.Scan(&id, &username, &departname, &created) checkErr(err) fmt.Println(id) fmt.Println(username) fmt.Println(departname) fmt.Println(created) } }