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) } }