go编程之mysql操作

xixionedream · · 3162 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

      


            针对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操作

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3162 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传