go编程之mysql操作

      


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



        

本文来自:CSDN博客

感谢作者:xixionedream

查看原文:go编程之mysql操作

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。