针对Go语言的数据库编程,Go标准库中针对此并没有对应的数据库操作包来直接操作目前主流的数据库,但在database/sql中封装了标准的数据库操作接口,其中包括有:
sql.Register 用于 go包中init函数中,用来注册数据库驱动如(不同数据库注册方式有所差异):
https://github.com/mattn/go-sqlite3
func init(){ sql.Register("sqlite3",&SQLiteDriver{}) }sql.Open 打开数据库连接,返回driver.Driver即数据库的Conn接口
Conn,err = sql.Open(...)
diver.Stmt是一种数据库操作的准备状态,与Conn相关联
stmt,err := Conn.Prepare(....sql)
driver.Tx 事务处理的两个过程接口定义,包括递交或回滚
type Tx interface{ Commit() error Rollback() error }
driver.Execer driver.Conn实现的接口,用来执行SQL查询语句
driver.Result执行Insert或者Update返回后的结果接口定义
type Result interface{ LastInsertId() (int64,error) RowsAffected() (int64,error) }driver.Rows执行查询返回的结果集接口定义
type Rows interface{ Columns() []string Close() error
Next(dest []Value) error }driver.RowsAffected, int64的别名,实现了Result接口
driver.Value 是interface{}接口,可以兼容任意数据类型
driver.ValueConverter 接口定义了ConvertValue(v interface{}) (Value,error)方法,实现普通值到driver.Value的转化
接下来看下mysql数据库使用示例:
首先需要准备go开发环境、mysql数据库,我的环境为eclipse、go1.3(windows)
安装git工具,配置环境变量,cmd下执行go get github.com/Go-SQL-Driver/MySQL获取go的Mysql库,默认会下载源码和库到GOPATH环境变量配置的第一个路径中
进入代码:(go数据库插入数据编写)
package main import ( "fmt" _ "github.com/Go-SQL-Driver/MySQL" "database/sql" ) func main() { fmt.Printf("---open link-------------------------------------------------") db, err := sql.Open("mysql","root:691214@tcp(localhost:3306)/opaq?charset=utf8") checkErr(err) //insert data fmt.Printf("----init sql------------------------------------------------") stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?") checkErr(err) fmt.Printf("------exec insert----------------------------------------------") id, err := stmt.Exec("rjx","基础服务部","2015-4-10") checkErr(err) fmt.Printf("---------4-------------------------------------------") fmt.Println(id) //update data stmt,err := db.Prepare("update userinfo set username=? where uid=?") checkErr(err) res,err := stmt.Exec("rjx",id) checkErr(err) affect,err := res.RowsAffected() checkErr(err) fmt.Println(affect) //query data rows,err := db.Query("Select * from userinfo") checkErr(err) for rows.Next(){ var uid int var username string var departname string var created sting err = rows.Scan(&uid,&username,&departname,&created) checkErr(err) fmt.Println(uid) fmt.Println(username) fmr.Println(depaetname) fmt.Println(created) } //delete data stmt,err := db.Prepare("delete from userinfo where uid=?") checkErr(err) res,err := stmt.Exec(id) checkErr(err) affect,err := res.RowsAffected() checkErr(err) fmt.Println(affect) db.Close() } func checkErr(err error){ if err != nil{ panic(err) } }
有疑问加站长微信联系(非本文作者)