• Go学习笔记-使用MySQL数据库


    2017-12-28 15:17:31 

     

    Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常 用的有如下几种:

     

    1. https://github.com/Go-SQL-Driver/MySQL 支持database/sql,全部采用go写。
    2. https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采用go写。
    3. 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)
    	}
    
    }
    

      

  • 相关阅读:
    github 上中国互联网公司的开源项目
    execve(".. ",[".. ",".. "],[/* ..*/])第二个 参数 数组硬传
    1506-122 (S) Expecting pointer to struct or union.
    徘徊~2013.7.31
    myeclipse2014 maven4eclipse配置
    01--maven安装与环境配置(windows)
    java宽度优先将二叉树存成数组
    java宽度搜索打印二叉树
    Jquery中bind绑定和on绑定的区别
    java设计模式singleton原理及实现(java1.4前不要使用双重锁保证线程安全)
  • 原文地址:https://www.cnblogs.com/lizhipengvvip/p/8135901.html
Copyright © 2020-2023  润新知