【Gomodules模式下连接MySQL以及基本操作】
MySQL的连接因为Go语言没有提供任何官方数据库驱动,所以需要安装第三方函数库。go get github.com/go-sql-driver/mysql这一命令会从代码中获取驱动的具体代码,并将这些代码放置到包库中,当需要用到驱动的时候,编译器会把驱动代码与用户编写的代码一同编译。具体代码如下:package mainimport ("database/sql""fmt"_ "github.c
·
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)
}
}
结果:
更多推荐
已为社区贡献1条内容
所有评论(0)