博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go操作MySQL数据库
阅读量:7253 次
发布时间:2019-06-29

本文共 3502 字,大约阅读时间需要 11 分钟。

hot3.png

Go操作MySQL数据库

主要的结构体DB和基于该结构体的方法

type DBfunc (db DB) Begin() (Tx, error)func (db *DB) Close() errorfunc (db *DB) Driver() driver.Driverfunc (db *DB) Exec(query string, args ...interface{}) (Result, error)func (db *DB) Prepare(query string) (*Stmt, error)func (db *DB) Query(query string, args ...interface{}) (*Rows, error)func (db *DB) QueryRow(query string, args ...interface{}) *Row

Query && QueryRow

如下代码示例,

package mainimport (	"database/sql"	"fmt"	_ "github.com/go-sql-driver/mysql"	"log")func main() {	//完整的数据库连接字符串	//username:password@protocol(address)/dbname?param=value	db, err := sql.Open("mysql", "root:034039@tcp(127.0.0.1:3306)/account")	defer db.Close()	if err != nil {		log.Println(err)	}	rows, err := db.Query("SELECT vin,no FROM vehicle_gps where type= ?", 2)	if err != nil {		log.Println(err)	}	var vin, no string	for rows.Next() {		err := rows.Scan(&vin, &no) //获取字段,select几个字段就传入几个变量		if err != nil {			log.Println(err)		}		fmt.Println(vin, no)	}	// 查询单条记录	singledRow := db.QueryRow("SELECT id,type FROM vehicle_gps where id = ?", 3901)	var id, kind int	singledRow.Scan(&id, &kind)	fmt.Println(id, kind)}

Exec

如下代码示例,

package mainimport (	"database/sql"	"fmt"	_ "github.com/go-sql-driver/mysql"	"log"	"math/rand"	"time")func main() {	//完整的数据库连接字符串	//username:password@protocol(address)/dbname?param=value	db, err := sql.Open("mysql", "root:034039@tcp(127.0.0.1:3306)/account")	if err != nil {		log.Println(err)	}	//在这里进行一些数据库操作	defer db.Close()	//db.Exec 执行查询	//rand.Intn(100) 返回100 以内随机数	rand.Seed(time.Now().Unix()) //设置随机数的种子	random := rand.Intn(100)	result, err := db.Exec("update vehicle_gps set type = ? where id = ?", random, 8033)	if err != nil {		fmt.Println("db.Exec error")		log.Println(err)	}	n, _ := result.RowsAffected()	fmt.Println(n)}

Prepare

如下代码示例

package mainimport (	"database/sql"	"fmt"	_ "github.com/go-sql-driver/mysql"	"log"	"math/rand"	"time")func main() {	db, err := sql.Open("mysql", "root:034039@tcp(127.0.0.1:3306)/account")	defer db.Close()	if err != nil {		log.Println(err)	}	stmt, err := db.Prepare("update vehicle_gps set type = ? where vin = ?")	defer stmt.Close()	if err != nil {		log.Println(err)	}	//rand.Intn(10) 返回10 以内随机数	rand.Seed(time.Now().Unix()) //设置随机数的种子	random := rand.Intn(100)	//Exec方法返回的是sql.Result对象	result, err := stmt.Exec(random, "JM7CW09FXC0106372")	if err != nil {		log.Println(err)	}	rows, err := db.Query("select type from vehicle_gps where vin = ?", "JM7CW09FXC0106372")	if err != nil {		log.Println(err)	}	var t int	for rows.Next() {		rows.Scan(&t)		fmt.Println(t)		if t != random {			panic("update type error")		}	}	n, _ := result.RowsAffected()	fmt.Println(n)}

事务的支持

如下代码示例

package mainimport (	"database/sql"	"fmt"	_ "github.com/go-sql-driver/mysql"	"log"	"math/rand"	"time")func main() {	db, err := sql.Open("mysql", "root:034039@tcp(127.0.0.1:3306)/account")	defer db.Close()	if err != nil {		log.Println(err)	}	tx, err := db.Begin() //开启一个事物	defer tx.Commit()     //一定要commit	if err != nil {		log.Println(err)	}	stmt, err := tx.Prepare("update vehicle_gps set type = ? where vin = ?")	defer stmt.Close()	if err != nil {		log.Println(err)	}	//rand.Intn(10) 返回10 以内随机数	rand.Seed(time.Now().Unix()) //设置随机数的种子	random := rand.Intn(100)	result, err := stmt.Exec(random, "JM7CW09FXC0106372")	if err != nil {		log.Println(err)	}	fmt.Println(random)	if n, _ := result.RowsAffected(); n == 2 {		fmt.Println("rollback")		tx.Rollback() //回滚事务后同时也要提交	}}

=========END=========

转载于:https://my.oschina.net/xinxingegeya/blog/732188

你可能感兴趣的文章
基于Andoird 4.2.2的同步框架源代码学习——同步提供端
查看>>
csv格式
查看>>
TabHost的使用
查看>>
leetcode -- Binary Tree Postorder Traversal
查看>>
어느 도시 보유 하 면 사랑 이다(事態が発生すれば、ある都市の恋はしません)【Si les villes un amour】{If have love in a city}...
查看>>
持续集成 最佳实践 研讨会(1月25日 广州)
查看>>
loj 1257 (求树上每一个点到树上另一个点的最长距离)
查看>>
Android 捕获组合键
查看>>
Linux 'XXXXXX' "is not in the sudoers file. This incident will be reported" 解决方法
查看>>
备份spfile 中的一个误区
查看>>
跟我一起学JQuery插件开发教程
查看>>
jquery .live() .delegate() .bind() .click()区别
查看>>
xcode修改项目名后反复出现 clang error
查看>>
外部表1(简单测试)
查看>>
Modern OpenGL用Shader拾取VBO内单一图元的思路和实现(2)
查看>>
C#ASP.NET 通用扩展函数之 IsWhat 简单好用
查看>>
第17周项目6 阅读文件,多文件
查看>>
python解决urllib2乱码问题
查看>>
TRegEx 正则表达式
查看>>
DALSA Coreco - 图像处理软件(Sapera LT )
查看>>