Go-MySQL-Driver
1、下载Go-Mysql-Driver
go get github.com/go-sql-driver/mysql
2、引入import
import(
"database/sql"
_"github.com/Go-SQL-Driver/MySQL"
"log"
"strconv"
//"reflect" //获取变量类型用
)
3、增:
func main (){
//insert
name := "name"
pwd := "password"
nickname := "nickname"
db,err := sql.Open("mysql","go_mysql_user:go_mysql_pwd@tcp(localhost:3306)/go_mysql?charset=utf8")
if err != nil{
panic(err.Error())
log.Println(err)
return
}
defer db.Close() //只有在前面用了 panic[抛出异常] 这时defer才能起作用,如果链接数据的时候出问题,他会往err写数据。defer:延迟,这里立刻申请了一个关闭sql 链接的操作,defer 后的方法,或延迟执行。在函数抛出异常一会被执行
insert_sql := "insert into users (name,pwd,nickname) value (?,?,?),(?,?,?),(?,?,?),(?,?,?)"
stmt,err := db.Prepare(insert_sql) //准备一个sql操作,返回一个*Stmt,用户后面的执行,这个Stmt可以被多次执行,或者并发执行
/*
* 这个stmt的主要方法:Exec、Query、QueryRow、Close
*/
if err != nil {
log.Println(err)
return
}
res,err := stmt.Exec(name,pwd,nickname,name,pwd,nickname,name,pwd,nickname,name,pwd,nickname)
if err != nil {
log.Println(err)
return
}
lastInsertId,err := res.LastInsertId() //批量插入的时候LastInserId返回的是第一条id,单条插入则返回这条的id
//lastInsertId,err := res.RowsAffected() //插入的是后RowsAffected 返回的是插入的条数
if err != nil {
log.Println(err)
return
}
//log.Println(reflect.TypeOf(lastInsertId)) //打印变量类型
last_insert_id_string := strconv.FormatInt(lastInsertId,) //int64 转string 需要引入 strconv包
log.Println("lastInsertId = " + last_insert_id_string)
}
4、删
func main (){
//delete
del_sql := "delete from users where id=?"
del_stmt,del_err := db.Prepare(del_sql)
del_stmt.Exec()//不返回任何结果
}
5、改
func main (){
//update
update_sql := "update users set name=? where id=?"
update_stmt,update_err := db.Prepare(update_sql)
if update_err != nil {
log.Println(update_err)
return;
}
update_res,update_err := update_stmt.Exec("username",)
if update_err != nil {
log.Printf("%v",update_err)
return
}
affect_count,_ := update_res.RowsAffected() //返回影响的条数,注意有两个返回值
log.Printf("%v",affect_count)
}
6、查一条
type User struct{
id int
name string
pwd string
nickname string
}
func main (){
//select
var user User
select_sql := "select * from users where id > ?"
select_err := db.QueryRow(select_sql,).Scan(&user.id,&user.name,&user.pwd,&user.nickname)//查询一条,返回一条结果。并赋值到user这个结构体类型的变量中,就算查询到的是多条,单返回的还是一条
if select_err != nil {//如果没有查询到任何数据就进入if中err:no rows in result set
log.Println(select_err)
return
}
log.Println(user)
}
7、查多条
func main (){
//查询多条
select_rows,select_err := db.Query(select_sql,)
if select_err != nil {
log.Println(select_err)
return
}
defer select_rows.Close()
for select_rows.Next(){
var id int
var name string
var pwd string
var nickname string
if err := select_rows.Scan(&id,&name,&pwd,&nickname); err != nil {
log.Println(err)
return
}
log.Printf("id=%v,name=%v,pwd=%v,nickname=%v",id,name,pwd,nickname)
}
}
8、事务
func main (){
//事务
tx,err := db.Begin() //声明一个事务的开始
if err != nil {
log.Println(err)
return
}
insert_sql := "insert into users (name,pwd,nickname) value(?,?,?)"
insert_stmt,insert_err := tx.Prepare(insert_sql)
if insert_err != nil {
log.Println(insert_err)
return
}
insert_res,insert_err := insert_stmt.Exec("tx_name","tx_pwd","tx_nickname")
last_insert_id,_ := insert_res.LastInsertId()
log.Println(last_insert_id)
defer tx.Rollback() //回滚之前上面的last_login_id是有的,但在回滚后该操作没有被提交,被回滚了,所以上面打印的Last_login_id的这条数据是不存在于数据库表中的
//tx.Commit() //这里提交了上面的操作,所以上面的执行的sql 会在数据库中产生一条数据
}
9、总结
db,err := sql.Open("mysql","数据库登录名:数据库密码@tcp(服务器:端口)/数据库名?charset=utf8") 对应修改;
defer db.Close() defer 是延迟或异常或者该方法结束时执行的操作。这里表示有异常就关闭db 可与 panic(err.Error())=》抛出异常。配合使用。一种情况不可执行=》你的方法进入了死循环,该方法不会结束与异常则不可执行。
LastInsertId() 获取插入第一条的id 有用
RowsAffected() 获取影响/插入的条数 有用
reflect.TypeOf(i) reflect包中TypeOf 返回的是变量i的类型
strconv.FormatInt(int64位变量,) strconv包中FormatInt将int64位的变量转为string
10、附github地址
https://github.com/go-sql-driver/mysql
Go-MySQL-Driver的更多相关文章
- Qt5.7中使用MySQL Driver
Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可. 如果没有安装,可以采取自己编译的方式. 在Qt的源码包 ...
- com.mysql.jdbc.Driver 与 org.gjt.mm.mysql.Driver的区别
com.mysql.jdbc.Driver的前身是org.gjt.mm.mysql.Driver,现在主要用com.mysql.jdbc.Driver,但为了保持兼容性保留了org.gjt.mm.my ...
- MySQL driver for Node
[MySQL driver for Node] 1.安装 2.一个示例 From this example, you can learn the following: Every method you ...
- Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)
Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...
- 关于MySQL的驱动org.gjt.mm.mysql.Driver
今天看了一个比较老视频使用org.gjt.mm.mysql.Driver来驱动连接,便试了一下看看怎么样,结果一直连不上数据库,后来看了tomcat的后台发现有报这个问题,于是把驱动改成com.mys ...
- [大数据技术]Kettle初次连接MySQL数据库 报错问题 错误连接数据库 Error occured while trying to connect to the database Exception while loading class org.gjt.mm.mysql.Driver
报错内容如下: 错误连接数据库 [foodmartconn] : org.pentaho.di.core.exception.KettleDatabaseException: Error occure ...
- QT:MYSQL driver not loaded解决方法
0.参考(按对本人帮助从高到低排列) Qt5.14.1 如何编译和使用mysql和mariadb数据库驱动 (15条消息) QMYSQL driver not loaded 的原理和解决办法_m158 ...
- jdbc mysql driver 6.0.2
url = jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8&useLegac ...
- Django的MySQL Driver配置
PEP 249规定了Python的数据库API.MySQL主要有三种API实现: MySQLdb 是Andy Dustman开发的.使用原生代码/C语言绑定的驱动,它已经开发了数十年. mysqlcl ...
- kettle 连接 mysql 出错 Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the ……
解决办法:1: 首先,到官网下载mysql-connector-java. 2: 把驱动文件放置在data-integration\lib\ 目录下
随机推荐
- [POI2018]Pionek
[POI2018]Pionek 题目大意: 在无限大的二维平面的原点放置着一个棋子.你有\(n(n\le2\times10^5)\)条可用的移动指令,每条指令可以用一个二维整数向量表示.请你选取若干条 ...
- C++ 经典知识点面试题
1.指针的优点和缺点 优点:灵活高效 (1)提高程序的编译效率和执行速度(数组下标往下移时,需要使用乘法和加法,而指针直接使用++即可) (2)通过指针可使用主调函数和被调函数之间共享变量或数据结构, ...
- IIS远程发布(Web Deploy)
作为开发人员,我们之前发布应用很可能是拷贝开发环境上发布好的代码文件到应用服务器硬盘中,然后在IIS中部署网站. 但是今天我们讲的是如果直接在我们的开发环境通过VS远程发布网站到应用服务器上,这将极大 ...
- .net core程序中使用微软的依赖注入框架
我之前在博文中介绍过Asp.net core下系统自带的依赖注入框架,这个依赖框架在Microsoft.Extensions.DependencyInjection中实现,本身并不是.net core ...
- Iowait的成因、对系统影响及对策--systemtap
http://blog.csdn.net/yunlianglinfeng/article/details/51698607
- 内置系统账户:Local system/Network service/Local Service 区别
参考文献: http://www.cnblogs.com/xianspace/archive/2009/04/05/1429835.html 前言 今天在安装sqlserver2008 r2的时候,在 ...
- windows server 2012 浏览器IE10无法下载。
cannot download in IE 10 of window server 2012 中文版解决办法: 1.打开IE,按F12,选择兼容浏览器为IE 9 2.选择IE的Internet选项菜单 ...
- JFinal项目部署到Weblogic注意事项
1:修改web.xml配置文件增加以下监听配置 <listener> <listener-class>com.jfinal.ext.kit.ElResolverListener ...
- 【BZOJ3585】mex
Description 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. 从第三行開始,每行一个询问l, ...
- no accounts with itunes connect access
有时候打包上传的时候 会遇见 no accounts with itunes connect access 的报错 原因主要如下: 1. 你没有被开发者管理员加入 itunes connect 权限 ...