当前位置: 首页 > news >正文

golang mysql

驱动

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

使用到的方法

func sql.Open(driverName string, dataSourceName string) (*sql.DB, error) func (*sql.DB).Prepare(query string) (*sql.Stmt, error)//使用DB.Prepare预编译并使用参数化查询,对预编译的SQL语句进行缓存,省去了每次解析优化该SQL语句的过程
func (*sql.Stmt).Query(args ...any) (*sql.Rows, error)func (*sql.DB).Query(query string, args ...any) (*sql.Rows, error)func (*sql.Rows).Next() bool
func (*sql.Rows).Scan(dest ...any) error

单行查询

package mainimport ("database/sql""fmt""time"_ "github.com/go-sql-driver/mysql"
)var db60 *sql.DB //数据库连接和交互的类型,可以理解为句柄func init() { constr := "otoyix:otoyix@tcp(192.168.0.60:3306)/test1"var err errordb60, err = sql.Open("mysql", constr) //建立与数据库的链接if err != nil {fmt.Printf("err: %v\n", err)}db60.SetConnMaxLifetime(time.Second * 60) //超时时间60sdb60.SetMaxOpenConns(0)                   //最大链接数,0为无限制db60.SetMaxIdleConns(10)                  //设置空闲链接数// return db60
}type Student struct {id        intname      stringage       intbirthdate string
}func main() {row := db60.QueryRow("select * from student where id > ? limit ?", 0, 1) //返回结果行student := Student{}err := row.Scan(&student.id, &student.name, &student.age, &student.birthdate)if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("student: %v\n", student)}

多行查询 - 预编译-参数化

package mainimport ("database/sql""fmt""time"_ "github.com/go-sql-driver/mysql"
)var db60 *sql.DB //数据库连接和交互的类型,可以理解为句柄func init() { constr := "otoyix:otoyix@tcp(192.168.0.60:3306)/test1"var err errordb60, err = sql.Open("mysql", constr) //建立与数据库的链接if err != nil {fmt.Printf("err: %v\n", err)}db60.SetConnMaxLifetime(time.Second * 60) //超时时间60sdb60.SetMaxOpenConns(0)                   //最大链接数,0为无限制db60.SetMaxIdleConns(10)                  //设置空闲链接数// return db60
}type Student struct {id        intname      stringage       intbirthdate string
}func main() {stmt, err := db60.Prepare("select * from student where id > ? limit ?") if err != nil {fmt.Printf("err: %v\n", err)}rows, err := stmt.Query(0, 2)if err != nil {fmt.Printf("err: %v\n", err)}student := Student{}for rows.Next() {err = rows.Scan(&student.id, &student.name, &student.age, &student.birthdate)if err != nil {panic(err)}fmt.Printf("student: %v\n", student)}}

非查询

源代码

func (db *DB) Exec(query string, args ...any) (Result, error)type Result interface {// LastInsertId returns the integer generated by the database// in response to a command. Typically this will be from an// "auto increment" column when inserting a new row. Not all// databases support this feature, and the syntax of such// statements varies.LastInsertId() (int64, error)// RowsAffected returns the number of rows affected by an// update, insert, or delete. Not every database or database// driver may support this.RowsAffected() (int64, error)
}

实现

	Result, err := db60.Exec("delete from student where id >1")fmt.Println(Result.RowsAffected())//返回受影响的行 与err

--------------end

http://www.lryc.cn/news/102711.html

相关文章:

  • uniapp使用echarts
  • Python命令模式介绍、使用
  • #typescript 使用file-saver模块#
  • 移动端适配布局rem和vw
  • 【Java基础教程】(四十八)集合体系篇 · 上:全面解析 Collection、List、Set常用子接口及集合元素迭代遍历方式~【文末送书】
  • 什么是 DNS ANAME 解析?
  • Neo4j 集群和负载均衡
  • go web框架 gin-gonic源码解读01————Engine
  • windows版docker部署springcloud项目
  • 探索工程机械远程控制新纪元:Intewell-Hyper II震撼发布!
  • DM8 DSC集群实时主备搭建
  • 配置IPv4 over IPv6隧道示例
  • 在中国区部署日志通2.0
  • centos下安装jdk
  • 【HDFS】LocatedBlocks、LocatedBlock、LocatedStripedBlock、ExtendedBlock类分析
  • Oracle 19c 报ORA-704 ORA-01555故障处理---惜分飞
  • D356周赛复盘:滑动窗口+三元问题思路
  • ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法
  • Git分布式版本控制工具和GitHub(一)--简介
  • 【Terraform学习】Terraform-AWS部署快速入门(快速入门)
  • 力扣75——深度优先搜索
  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入输出、缺省参数、函数重载
  • 代码随想录训练营Day55动态规划part15|392.判断子序列|115.不同的子序列
  • Linux下安装RabbitMQ教程
  • 如何加强Mysql安全,请给出可行的具体措施
  • 创造自己的宠物医院预约服务小程序,步骤详解
  • MACOM EDI 需求分析
  • 使用Spring Boot AOP实现日志记录
  • 图像中不规则物体的长轴与短轴:OpenCV实现指南
  • C/C++开发,opencv与qt结合播放视频