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\ 目录下
随机推荐
- Xdebug、XHProf 、OneAPM 和 SocketLog
DevOps 生活变得美好的神器.分别是 Xdebug.XHProf .OneAPM 和 SocketLog 方法很简单,从 Xdebug 下载最新版的源代码. wget 解压: tar –zxvf ...
- Java 8新特性----Lambda
Lambda 一.如何辨别Lambda表达式 Runnable noArguments = () -> System.out.println("Hello World"); ...
- jsp下载word
<%@ page language="java" contentType="application/msword;charset=utf-8"%> ...
- php get_magic_quotes_gpc()函数使用
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符"\",以确保这些数据不会引起程序,特别 ...
- Android的onLayout、layout方法讲解
onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置.放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用子View的layout方 ...
- 用vue的自定义组件写了一个拖拽 组件,局部的 只能在自定义元素内的
简单实现 没有做兼容<!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 关于ADO.Net SqlConnection的性能优化
Connections Database connections are an expensive and limited resource. Your approach to connection ...
- .NET:Threading and Exceptions
Do handle exceptions in threads. Unhandled exceptions in threads, even background threads, generally ...
- CentOS安装mysql*.rpm提示conflicts with file from package的解决办法
看到“conflicts”,是产生冲突了,文件“/usr/share/mysql/charsets/*”需要MySQL-server-5.6.19-1.linux_glibc2.5.x86_64版本的 ...
- Android GUI之Activity、Window、View
相信大家在接触Android之初就已经知道了Activity中的setContentView方法的作用了,很明显此方法是用于为Activity填充相应的布局的.那么,Activity是如何将填充的布局 ...