1、驱动选择地址
github.com/golong.go/wiki/Projets#databases
2、数据库导入并初始化
import (
"database/sql"
_ "github.com/go-sql-driver/mysql" //触发导入
)
3、操作
1、使用驱动
a.选择驱动
b.初始化导入驱动
2、打开数据库
3、操作:
a. 修改对应方法: Exec
b. 查询对应方法: Query; for + Rows.Next Rows.Scan
4、关闭资源
a.查询: Rows.Close()
5、进程退出
关闭数据库(连接池)
ORM框架
目前已经到了 gorm 2.0 版本
4、示例
func main(){
driverName:="mysql"
dsn := "user:password@protocol(host:prot)/dbname?charset=utf8mb4&loc=Local&parseTime=true" // data store name 数据库连接信息,使用协议,用户&密码,数据库,连接参数
db,err := sql.Open(driverName,dsn) //打开数据库
fmt.Println(db,err)
if err !=nil{
fmt.Println(err)
return
}
defer db.Close()
err = db.Ping()
// 操作
rows,err :=db.Query("select * from user;") //查询语句
if err !=nil{
fmt.Println(err)
return
}
defer rows.Close()
for rows.Next(){
var (
id string
name string
password string
sex bool
birthday *time.Time
)
err:=rows.Scan(&id,&name,&password,&sex,&birthday,&addr,&tel) //Scan用于查询一行中的值
if err !=nil{
fmt.Println(err)
break
} else {
fmt.Println(id,name,password,sex,birthday)
}
}
var id int 64
err := db.QueryRow("select id from user").Scan(&id) //使用Scan方法直接查询某列值
}
5、sql 预处理
name:= "%kk%" //sql 注入
sql:=`
select id,name,password,sex,birthday,addr,tel from user where name like ? order by ? desc limit ? offset ?
` //占位一般只占位where后面的各种条件,但是不能占位select后面选择的字段,也不能替代关键字,也不能替代表名,表名的属性也不能替代,但是可以使用 fmt.Sprintf()函数来代替
fmt.Println(sql)
// 操作
rows,err:=db.Query(sql,name,"birthday",3,0) //数据库的预处理方式
if err !=nil{
fmt.Println(err)
return
}
defer row.Close()
fro rows.Close()
for row.Next() {
var (
id int64
)
}
文档更新时间: 2023-03-26 17:22 作者:张尚