golang mysql scan_在Golang中对MySQL进行操作
Golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口。可以在Github上找到很多开源的驱动。
其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口。
使用这个驱动, 在项目里import进:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
在正式使用database/sql包之前,首先得明白sql.DB并不代表一个数据库连接,它并不会与数据库建立任何连接,也不会验证参数的合法性,要想知道DSN的合法性,需使用sql.DB实例(比如db)db.Ping() 方法, 如下:
err = db.Ping()
if err != nil {
// 错误处理
}
使用sql.Open()方法即可获得一个sql.DB实例。需要注意的是,sql.DB的设计就是用来作为长连接使用的,不应该在项目里频繁的进行Open()与Close(),提倡的做法是声明一个全局的sql.DB实例, 将其复用起来。即只Open()一次,使用直到程序结束任务。
拿到sql.DB实例之后,就可以对数据库进行操作了。
在操作数据库时,推荐做法是使用db.Prepare()对SQL语句进行预编译,这样具有较高的安全性,可在一定程度上避免诸如SQL注入这样的攻击手段。
一些示例:
/*
查询操作
*/
stmt, err := db.Prepare("SELECT `user_name` FROM `users` WHERE `id` = ?")
defer stmt.Close()
if err != nil {
//错误处理
}
var userName string
//Scan() 将结果复制到userName
err = stmt.QueryRow(1).Scan(&userName)
fmt.Println(userName)
/*
多行结果
*/
stmt, err := db.Prepare("SELECT `user_name` FROM `users` WHERE `age` = ?")
defer stmt.Close()
if err != nil {
//错误处理
}
rows, err := stmt.Query(年龄)
if err != nil {
//错误处理
}
for rows.Next() {
var userName string
if err := rows.Scan(&userName); err != nil {
//错误处理
}
}
/*
插入操作
*/
stmt, err := db.Prepare("INSERT INTO `users` (`user_name`, `age`) VALUES(?, ?)")
defer stmt.Close()
if err != nil {
//错误处理
}
stmt.Exec("名字",年龄)
/*
事务
*/
tx, err := db.Begin()
if err != nil {
//错误处理
}
defer tx.Rollback()
stmt, err := db.Prepare("")
defer stmt.Close()
if err != nil {
//错误处理
}
stmt.Exec()
err = tx.Commit()
if err != nil {
//错误处理
}
golang mysql scan_在Golang中对MySQL进行操作相关推荐
- linux中mysql设置大小写敏感,linux中修改mysql表名大小写敏感
在mysql启动参数文件中配置mysql对大小写不敏感. 参数文件位置:/etc/my.cnf 1.用rpm包安装的MySQL是不会安装/etc/my.cnf文件的, 至于为什么没有这个文件而MySQ ...
- linux 把mysql大小写关闭_linux中设置mysql大小写不去区分方法
linux中设置mysql大小写不去区分方法 发布时间:2020-05-14 12:01:31 来源:亿速云 阅读:191 作者:三月 本文主要给大家介绍linux中设置mysql大小写不去区分方法, ...
- mysql ef_在EF中使用MySQL的方法及常见问题
有时需要在网上租用空间或数据库,Mysql成本低一些,所以想将sql server转成mysql-- 注意:在安装Mysql时要选择文字集为utf8,否则将不能使用中文(当前也可以在创建数据库时使用u ...
- django给mysql配主从_django中的mysql主从读写分离:一、配置mysql主从分离
一.配置mysql主从同步的步骤: (1) 在主服务器上,必须开启二进制日志机制和配置一个独立的ID (2) 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号 (3) 在 ...
- django使用mysql原始语句,Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...
- linux开启mysql外链,Linux中开启MySQL远程访问功能
(1)确认一下3306是否对外开放,MySQL默认状态下是不开放对外访问功能的.查看的办法如下: 1 ~# netstat -an | grep 3306 2 tcp 0 0 127.0.0.1:33 ...
- python django mysql结果获取_Django中从mysql数据库中获取数据传到echarts方式
尝试了几种方法,感觉过于复杂,于是自己写了一个方法. (1)首先在要绘图的页面传入从数据库中提取的参数,这一步通过views可以实现: (2)然后是页面加载完成时执行的函数ready,调用方法f; ( ...
- linux系统 安装mysql,在linux系统中安装MySQL
1.安装 Linux 系统中自带的 MySQL 安装包 在现在常用的发行版本里都集中了MySQL安装包 CentOS系统中的YUM中包含了MySQL安装包,版本是MySQL5,rpm软件包的名称是my ...
- docker mysql域名访问_Docker中配置MySQL并实现远程访问
Docker配置MySQL容器 拉取MySQL镜像 docker pull mysql:5.6 有可能会因为网络问题失败,重复尝试. 创建容器 docker run -d --name selfdef ...
- django mysql sql语句_Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...
最新文章
- 在IE6/7下表格td标签没有内容时不显示边框?
- 第九章 硬件抽象层:HAL 心得笔记
- android 通过广播唤醒被杀死的app
- adb connect 192.168.1.10 failed to connect to 192.168.1.10:5555
- php 导出mysql 结构_导出结构和数据(如phpmyadmin)
- APPCAN学习笔记003---原生开发与HTML5技术
- 关于使用mac聚焦搜索无法搜索软件的情况
- OUC_Summer Training_ DIV2_#11 722
- Linux 怎么找回管理员密码?
- 操作系统server 2012 r2 安装简体中文语言包
- 高维球体的体积是多少
- 青岛大学计算机学院住宿条件,青大学霸宿舍 | 不一般的经济女神与“程序猿”的考研路...
- C语言及程序设计初级—分离整数与小数部分
- Android eclipse常见错误开发总结
- 极限挑战 极致突破——奇安信的2022
- win10设置pin一直转圈_Win10 自带手机投屏功能,80% 的人居然都不知道
- linux dumpe2fs命令
- 重磅!西安交通大学使用脑机接口技术实现了高位截瘫失语患者“说”出“心里话”
- python使用loaddata_Python data.load_data方法代码示例
- Prometheus组件详解