MySQL的连接

因为Go语言没有提供任何官方数据库驱动,所以需要安装第三方函数库。

go get github.com/go-sql-driver/mysql

这一命令会从代码中获取驱动的具体代码,并将这些代码放置到包库中,当需要用到驱动的时候,编译器会把驱动代码与用户编写的代码一同编译。具体代码如下:

package main

import (
	"database/sql"
	"fmt"
	 _ "github.com/go-sql-driver/mysql"
)

func main(){
	dsn := "root:123456@tcp(127.0.0.1:3306)/ghltest"
	db,err:=sql.Open("mysql",dsn)
	if err!=nil{
		fmt.Println("db err=",err)
	}
	defer db.Close()//关闭数据库
	err=db.Ping()
	if err!=nil{
		fmt.Println("ping err=",err)
	}
	fmt.Println("数据库连接成功")
}

需要注意的是:

sql.open(驱动名,数据源dsn)(*DB,err)

数据源语法:“用户名:密码@连接方式/数据库名”

open()在执行时不会真正的与数据库进行连接,只是设置连接数据库需要的参数 ping()方法才是连接数据库

MySQL语句的执行

在我的数据库下有一张student_tab表格,并且有如下三个字段:
在这里插入图片描述

操作一:插入单行数据

代码:

dsn := "root:123456@tcp(127.0.0.1:3306)/ghltest"
db,err:=sql.Open("mysql",dsn)
if err!=nil{
	fmt.Println("db err=",err)
}
defer db.Close()//关闭数据库
err=db.Ping()
if err!=nil{
	fmt.Println("ping err=",err)
}
fmt.Println("数据库连接成功")

//操作一:执行数据操作语句

	sql:="insert into student_tab values ('ghl',23,1)"
	result,_:=db.Exec(sql)		//执行SQL语句
	n,_:=result.RowsAffected();	//获取受影响的记录数
	fmt.Println("受影响的记录数是",n)

执行结果:
在这里插入图片描述

操作二:执行预处理

代码:

import (
	"database/sql"
	"fmt"
	 _ "github.com/go-sql-driver/mysql"
)

func main(){

	dsn := "root:123456@tcp(127.0.0.1:3306)/ghltest"
	db,err:=sql.Open("mysql",dsn)
	if err!=nil{
		fmt.Println("db err=",err)
	}
	defer db.Close()//关闭数据库
	err=db.Ping()
	if err!=nil{
		fmt.Println("ping err=",err)
	}
	fmt.Println("数据库连接成功")

	//操作一:执行数据操作语句

/*		sql:="insert into student_tab values ('ghl',23,1)"
		result,_:=db.Exec(sql)		//执行SQL语句
		n,_:=result.RowsAffected();	//获取受影响的记录数
		fmt.Println("受影响的记录数是",n)*/

	//操作二:执行预处理
	//什么是预处理:预编译一次,可以多次执行。用来解决一条SQL语句频繁执行的问题。
		stu:=[2][3] string{{"ketty","25","2"},{"rose","26","3"}}
		stmt,_:=db.Prepare("insert into student_tab values (?,?,?)")		//获取预处理语句对象
		for _,s:=range stu{
			stmt.Exec(s[0],s[1],s[2])			//调用预处理语句
		}

}

结果:
在这里插入图片描述

操作三:单行查询

代码:

import (
	"database/sql"
	"fmt"
	 _ "github.com/go-sql-driver/mysql"

)

func main(){

	dsn := "root:123456@tcp(127.0.0.1:3306)/ghltest"
	db,err:=sql.Open("mysql",dsn)
	if err!=nil{
		fmt.Println("db err=",err)
	}
	defer db.Close()//关闭数据库
	err=db.Ping()
	if err!=nil{
		fmt.Println("ping err=",err)
	}
	fmt.Println("数据库连接成功")

	//操作一:执行数据操作语句

/*		sql:="insert into student_tab values ('ghl',23,1)"
		result,_:=db.Exec(sql)		//执行SQL语句
		n,_:=result.RowsAffected();	//获取受影响的记录数
		fmt.Println("受影响的记录数是",n)*/

	//操作二:执行预处理
	//什么是预处理:预编译一次,可以多次执行。用来解决一条SQL语句频繁执行的问题。
	/*	stu:=[2][3] string{{"ketty","25","2"},{"rose","26","3"}}
		stmt,_:=db.Prepare("insert into student_tab values (?,?,?)")		//获取预处理语句对象
		for _,s:=range stu{
			stmt.Exec(s[0],s[1],s[2])			//调用预处理语句
		}*/
	

	//操作三:单行查询
	var id,age int
	var name string
	rows:= db.QueryRow("select  name,age,id from student_tab where id=1")

	rows.Scan(&name,&age,&id)
	fmt.Println(name,"--",age,"--",id)



}

结果:
在这里插入图片描述

操作四:多行查询

代码:

import (
	"database/sql"
	"fmt"
	 _ "github.com/go-sql-driver/mysql"

)

func main(){

	dsn := "root:123456@tcp(127.0.0.1:3306)/ghltest"
	db,err:=sql.Open("mysql",dsn)
	if err!=nil{
		fmt.Println("db err=",err)
	}
	defer db.Close()//关闭数据库
	err=db.Ping()
	if err!=nil{
		fmt.Println("ping err=",err)
	}
	fmt.Println("数据库连接成功")

	//操作一:执行数据操作语句

/*		sql:="insert into student_tab values ('ghl',23,1)"
		result,_:=db.Exec(sql)		//执行SQL语句
		n,_:=result.RowsAffected();	//获取受影响的记录数
		fmt.Println("受影响的记录数是",n)*/

	//操作二:执行预处理
	//什么是预处理:预编译一次,可以多次执行。用来解决一条SQL语句频繁执行的问题。
	/*	stu:=[2][3] string{{"ketty","25","2"},{"rose","26","3"}}
		stmt,_:=db.Prepare("insert into student_tab values (?,?,?)")		//获取预处理语句对象
		for _,s:=range stu{
			stmt.Exec(s[0],s[1],s[2])			//调用预处理语句
		}*/


	//操作三:单行查询
/*	var id,age int
	var name string
	rows:= db.QueryRow("select  name,age,id from student_tab where id=1")

	rows.Scan(&name,&age,&id)
	fmt.Println(name,"--",age,"--",id)*/


    //操作四:多行查询
    rows,_:=db.Query("select * from student_tab")
	var id,age int
	var name string
    for rows.Next(){
		rows.Scan(&name,&age,&id)
		fmt.Println(name,"--",age,"--",id)
	}

}

结果:
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐