内容简介:参考:
建立测试数据表
CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(25) NOT NULL DEFAULT '', `age` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
上代码
package main
import (
// sql.DB 是接口协议,具体的DB操作是通过driver执行
// 但是不能通过driver直接操作,需要通过接口操作,此处匿名引入,自动注册初始化到sql.DB中
_ "github.com/go-sql-driver/mysql"
"database/sql"
"fmt"
)
/**
* DB 连接池
*/
type DBWorker struct {
Dsn string
Db *sql.DB
}
// 对应数据表字段
type userTB struct {
Id int
Name sql.NullString // 数据类型设置为 NullXXX,以便读取时判断是否赋值
Age sql.NullInt64
}
func main() {
var err error
dbw := DBWorker{
// 格式大概为:user:password@protocol(ip:port)/database?charset=utf8
Dsn: "root:XXXXXX(@tcp(localhost:3307)/test?charset=utf8",
}
dbw.Db, err = sql.Open("mysql", dbw.Dsn)
if err != nil {
panic(err)
return
}
defer dbw.Db.Close()
dbw.insertData()
dbw.queryData()
}
// 插入数据测试
func (dbw* DBWorker) insertData() {
stmt, _ := dbw.Db.Prepare(`INSERT INTO user (name, age) VALUES (?, ?)`)
defer stmt.Close()
ret, err := stmt.Exec("虚无缥缈", 23)
if err != nil {
fmt.Printf("insert data error:%v\n", err)
return
}
if LastInsertId, err := ret.LastInsertId(); err == nil {
fmt.Printf("LastInsertId %d\n", LastInsertId)
}
if RowsAffected, err := ret.RowsAffected(); err == nil {
fmt.Printf("RowsAffected %d\n", RowsAffected)
}
}
// 查询数据测试
func (dbw *DBWorker) queryData() {
stmt, _ := dbw.Db.Prepare("SELECT * FROM user WHERE age >= ? and age < ?")
defer stmt.Close()
user := userTB{}
rows, err := stmt.Query(20, 30)
defer rows.Close()
if err != nil {
fmt.Printf("query data error : %v\n", err)
return;
}
for rows.Next() {
// SCAN赋值的顺序需要与拉取出来的数据一一对应
// 建表时是 id,name,age,此处赋值相对应的为Id, Name, Age
err = rows.Scan(&user.Id, &user.Name, &user.Age)
if err != nil {
fmt.Printf("scan error : %v\n", err)
continue
}
// 运行为空的情形下,给赋值默认值
if !user.Name.Valid {
user.Name.String = ""
}
// 运行为空的情形下,给赋值默认值
if !user.Age.Valid {
user.Age.Int64 = 0
}
fmt.Println("id: ", user.Id, " name: ", user.Name.String, " age: ", int(user.Age.Int64))
}
err = rows.Err()
if err != nil {
fmt.Printf("rows.Err: %v", err)
}
}
运行结果
LastInsertId 7 RowsAffected 1 id: 1 name: a age: 25 id: 5 name: 石义波 age: 23 id: 6 name: 石义波 age: 23 id: 7 name: 虚无缥缈 age: 23 Process finished with exit code 0
image.png
结束语
以上所述就是小编给大家介绍的《Mysql操作》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JavaScript骚操作之操作符
- Go 语言操作 MySQL 之 事务操作
- C# 数据操作系列 - 1. SQL基础操作
- Vim 跨行操作与 Ex 命令操作范围
- 并发环境下,先操作数据库还是先操作缓存?
- 关于HBase Shell基本操作的表操作示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图论算法理论、实现及应用
王桂平//王衍//任嘉辰 / 北京大学 / 2011-1 / 54.00元
《图论算法理论、实现及应用》系统地介绍了图论算法理论,并选取经典的ACM/ICPC竞赛题目为例题阐述图论算法思想,侧重于图论算法的程序实现及应用。《图论算法理论、实现及应用》第1章介绍图的基本概念和图的两种存储表示方法:邻接矩阵和邻接表,第2~9章分别讨论图的遍历与活动网络问题,树与图的生成树,最短路径问题,可行遍性问题,网络流问题,支配集、覆盖集、独立集与匹配,图的连通性问题,平面图及图的着色问......一起来看看 《图论算法理论、实现及应用》 这本书的介绍吧!