内容简介:参考:
建立测试数据表
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基本操作的表操作示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM/ICPC程序设计与分析
沈云付 / 清华大学 / 2010-7 / 39.50元
《ACM/ICPC程序设计与分析(C++实现)》介绍ACM国际大学生程序设计竞赛概况及程序设计基础,系统介绍数论、组合数学、动态规划、计算几何、搜索、图论和网络流等专题的典型算法,挑选历年竞赛中许多有代表性的竞赛题作为例题进行分析,便于学生编程时模仿学习。每章的例题和习题都配有输入输出样例,方便学生在编程时测试与调试程序。《ACM/ICPC程序设计与分析(C++实现)》以C++为程序设计语言,以提......一起来看看 《ACM/ICPC程序设计与分析》 这本书的介绍吧!