Go语言连接MySQL数据并进行增删改查操作

如何用Go语言连接mysql数据库

本文由Go小白编写,适合于Go小白观看,大神请指教。

1、首先是导包,下载地址 下载解压后,放入工程根目录下,例如

2、要手动import    _ "github.com/go-sql-driver/mysql"     需要等一会下载才能不报错(使用GOLAND) 2、要手动import _ "github.com/go-sql-driver/mysql" 需要等一会下载才能不报错(使用GOLAND)
3、首先要连接数据库:使用函数  db,err:= sql.Open("mysql",数据库地址)  其中第一个参数为固定的驱动名称,不需要更改,而主要需要更改数据库地址。如果err!=nil,那么连接成功,且db就是连接到的数据库对象。 3、首先要连接数据库:使用函数 db,err:= sql.Open("mysql",数据库地址) 其中第一个参数为固定的驱动名称,不需要更改,而主要需要更改数据库地址。如果err!=nil,那么连接成功,且db就是连接到的数据库对象。

4、如何书写数据库地址: 格式为:数据库用户名:数据库密码 @tcp(数据库所在主机的ip地址)/数据库的名称?charset=uft8

当然这是一个字符串,可以采用字符串拼接,下面给出模板,小白写的,大家只需要在前面定义好相关的变量值就可以直接使用了。要注意严格区分大小写

dbusername+":"+dbpassword+"@tcp("+dbhostip+")/"+dbname+"?charset=utf8"

5、简单判断一下err是否为nil来判断是否连接成功。接下来就是进行CRUD操作了

6、增删改:如果有学过Java数据库的话,下面比较好理解。对于一个sql语句,在GO/Java中都是一个字符串,而大多数的字符串都是拼接而成的。因此就会有两种情况

(1)整个sql语句是完整确认的,这样的sql语句,我们采用 result,err:=db.Exec(sql语句) 比较合适

(2)sql语句不是确定的,是要通过变量来拼接的,那么使用通配符? 这点与Java一致,则使用如下的函数:

stmt,err:=db.Prepare(带?的sql语句)

result,err:=stmt.Exec(按照顺序以逗号分隔?的值) (其实就是Java里面的PreparedStatement)

最终通过result可以看到一些返回值,例如影响几行等

7、查询:这是数据库操作的难点:也是分为6中的两种情况,只不过将Exec()换成Query(),这样result就是查询到的结果,

之后便是遍历 for result.Next(){ } 想获取结果值,需要定义一个变量,然后按照顺序result.Scan(&V1,&v2,); 这样值就传给了V1,V2

8、最后,没有难度,但是重要也是极其容易忽视的问题,关闭资源

9,最后贴一点很乱的代码(其实看完前面8个 你是不需要看代码的 啊哈哈 ,总得为自己懒得整理代码找点接口)

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)
//下面填写自己的数据库信息,看不懂英文?这都看不懂还学啥编程。不知道数据库信息?那还用啥数据库。
var (
	dbhostip=""
	dbusername=""
	dbpassword=""
	dbname=""
)
func checkErr(err error){
	if err!=nil{
		panic(err)
	}
}
func main(){
	db,err:=sql.Open("mysql",dbusername+":"+dbpassword+"@tcp("+dbhostip+")/"+dbname+"?charset=utf8")
	checkErr(err)
	stmt,err:=db.Prepare("SELECT * FROM note where year =?")
	checkErr(err)

	rows ,err :=stmt.Query("100")

	checkErr(err)
	for rows.Next() {
		var year string
		var month string
		var day string
		var thing string
		var money  string
		err :=rows.Scan(&year,&month,&day,&thing,&money)
		checkErr(err)
		fmt.Println(year,month,day,money,thing)
	}
	defer db.Close()
	defer stmt.Close()
	defer rows.Close()


	//
	//stmt,err:=db.Prepare("insert into note values (?,?,?,?,?)")
	//checkErr(err)
	//result,err:=stmt.Exec("888","888","888","78","79")
	result,err:=db.Exec("delete from note where year=1")
	checkErr(err)
	fmt.Println(result.LastInsertId())

}

经验分享 程序员 微信小程序 职场和发展