内容简介:参考:
建立测试数据表
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基本操作的表操作示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
React Native:用JavaScript开发移动应用
【美】Truong Hoang Dung(张皇容) / 奇舞团 / 电子工业出版社 / 2015-9 / 65.00
React Native是当前移动端开发中的优秀解决方案。《React Native:用JavaScript开发移动应用》围绕着如何将一个完整App提交到App Store,讲解了使用React Native开发iOS应用所涉及的方方面面。首先介绍了Flexbox布局,教大家从零开始搭建一个初始应用,以此阐明React Native的基础运行机理;然后介绍了Flux的设计思想,怎么理解和使用Pro......一起来看看 《React Native:用JavaScript开发移动应用》 这本书的介绍吧!