GO连接MySQL
通过GO页面作为客户端访问数据库
1.因为GO语言没有提供任何官方数据库驱动,所以需要安装第三方函数库。
2.由于在github上安装,所以需要安装git软件,安装过程一直点击下一步即可,安装完需要配置环境变量
git自行下载
配置gopath环境变量,配置完git到的包自动下载到那里
安装完git后使用get指令下载第三方函数库
一.安装数据库驱动
在cmd命令窗口中输入如下命令安装驱动
go get github.com/go-sql-driver/mysql
这一命令会从代码中获取驱动的具体代码,并将这些代码放置到包库中,当需要用到驱动的时候,
编译器会把驱动代码与用户编写的代码一同编译。
至此在GOPATH目录下回看到git下来的文件
二.连接数据库
1.在src目录下创建demo.go文件,导入数据库驱动
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
注意:程序在操作数据库的时候只需要用到databases/sql,而不需要直接使用数据库驱动,所以
程序在导入数据库驱动的时候将这个包的名字设置成下划线。
2.通过sql.open()连接数据库
sql.open(驱动名,数据源dsn)(*DB,err)
数据源语法:"用户名:密码@[连接方式](主机名:端口号)/数据库名"
注意:open()在执行时不会真正的与数据库进行连接,只是设置连接数据库需要的参数
ping()方法才是连接数据库
3.创建测试表
//use test1
// mysql> create table stu(
// -> id int primary key,
// -> name varchar(10)
// -> );
三.代码
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //sql操作时不需要,只是连接的时候需要,所以加下划线忽略
//它时驱动mysql的
)
func main() {
// 数据源语法:"用户名:密码@[连接方式](主机名:端口号)/数据库名"
db, _ := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test1")
//设置连接数据库的参数 1.驱动名固定写法,2 数据源名称@符号后边如果是tcp协议,那么可以省略不写
//返回db和一个错误
defer db.Close() //关闭数据库
//上边只是设置参数,并未真正连接
//真正连接
err := db.Ping() //连接数据库
if err != nil { //判断成功失败
fmt.Println("数据库连接失败")
//如果连接失败 先检查数据库服务是否已经启动 net start mysql启动数据库
return
}
//在数据库中创建表
//use test1
// mysql> create table stu(
// -> id int primary key,
// -> name varchar(10)
// -> );
//1 插入数据
//操作一:执行数据操作语句
// sql := "insert into stu values(2,'beery')"
// result, _ := db.Exec(sql) //返回执行结果 //执行sql语句
// n, _ := result.RowsAffected() //获取受影响的记录数
// fmt.Println("受影响的记录数是", n);//这个分号加上也不错,标准没有
//举一反三 更新删除同理
//操作二:执行预处理
// stu := [3][2]string{{"3", "ketty"}, {"4", "rose"}, {"5", "mike"}} //三行两列
// //准备一下 ?是占位符 返回*Stmt 和 err
// stmt, _ := db.Prepare("insert into stu values(?,?)") //获取预处理语句对象
// for _, s := range stu { //返回下标和值
// stmt.Exec(s[0], s[1]) //调用预处理语句传参数 对应id name
// //运行一下,都进去了
// }
// //增删改用操作一就行
// //操作三:单行查询
// var id, name string
// //获取一行数据
// rows := db.QueryRow(" select * from stu where id= 4 ") //返回当前行的 一条记录 可以写where 条件
// rows.Scan(&id, &name) //将rows中的数据存放到id 和 name 中
// fmt.Println("id:", id, "name:", name)
// //操作四:多行查询
rows, _ := db.Query(" select * from stu") //获取所有数据,返回所有的行
//取数据库中的数据的时候有个指针,取完以后下移,没有记录时,不取了
//刚开始的时候,指向第一条记录前的数据
var id, name string
for rows.Next() { //返回的bool型 循环显示所有的数据
//有数据就获取当前行的数据
rows.Scan(&id, &name)
fmt.Println("id: ", id, "name: ", name)
}
}
(本笔记整理自网络资源,侵删)