内容简介:打卡时间: 21:04
学习 go 操作mysql,crud测试
- 代码
package main /** * 使用go-sql-driver/mysql连接mysql *安装方式:go get -u github.com/go-sql-driver/mysql */ import ( _ "github.com/go-sql-driver/mysql" "database/sql" "fmt" "mypath" "crypto/md5" "encoding/hex" ) /** *声明数据库信息 */ const ( DB_TYPE = "mysql" DB_SOURCE_URL_GOLANG_TEST = "root:password@tcp(localhost:3306)/golang_test?charset=utf8" DB_SOURCE_URL_TEST = "root:password@tcp(localhost:3306)/test?charset=utf8" ) /** * 程序目标:连接mysql,crud, 再完成一个简单的注册功能 * 操作的表信息 * CREATE TABLE `baiyi_user` ( `user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', `user_name` varchar(255) NOT NULL COMMENT '用户名字', `user_password` varchar(255) NOT NULL COMMENT '用户密码', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8mb4; */ func main() { /** *获取数据源的一个连接 */ db, err := sql.Open(DB_TYPE, DB_SOURCE_URL_GOLANG_TEST) mypath.Check(err) defer db.Close() //testInsertData(db) //testQueryData(db) //testUpdateData(db) //testDeleteData(db) //flag := checkIsExistUser("username1", db) //fmt.Println(flag) //flag = checkIsExistUser("username2", db) //fmt.Println(flag) //fmt.Println(register("username1", "liangdaoyuan", db)) //fmt.Println(register("DoubleJun", "liangdaoyuan", db)) fmt.Println(login("DoubleJun", "liangdaoyuan2", db)) fmt.Println(login("DoubleJun", "liangdaoyuan", db)) fmt.Println(login("DoubleJun2", "liangdaoyuan", db)) } /** * 测试插入 */ func testInsertData(db *sql.DB) { /** *插入就绪 */ stmtIns, err := db.Prepare("INSERT INTO baiyi_user(user_name, user_password) VALUES(?,?)") mypath.Check(err) defer stmtIns.Close() var password string var username string var effectedCount int = 0 for i := 1; i < 25; i++ { password = fmt.Sprintf("520520somuch%d",i) password = md5Value(password) username = fmt.Sprintf("username%d", i) rs, err := stmtIns.Exec(username, password) if eff, _ := rs.RowsAffected(); eff>0 { effectedCount++ } mypath.Check(err) } } /** *查询操作 */ func testQueryData(db *sql.DB) { /** *执行查询操作 */ rows, err := db.Query("SELECT user_name FROM baiyi_user") mypath.Check(err) columns, err := rows.Columns() mypath.Check(err) values := make([]sql.RawBytes, len(columns)) //存放数据 scanArgs := make([]interface{}, len(values)) //存放地址 for i := range values { scanArgs[i] = &values[i] } // Fetch rows for rows.Next() { // get RawBytes from data err = rows.Scan(scanArgs...) // mypath.Check(err) // Now do something with the data. // Here we just print each column as a string. var value string for i, col := range values { // Here we can check if the value is nil (NULL value) if col == nil { value = "NULL" } else { value = string(col) } fmt.Println(columns[i], ": ", value) } } if err = rows.Err(); err != nil { panic(err.Error()) } } /* *更新操作 */ func testUpdateData(db *sql.DB) { var updateSql string = "UPDATE baiyi_user SET user_name=? WHERE user_id=?" stmt, err := db.Prepare(updateSql) mypath.Check(err) rs, err := stmt.Exec("Jack", 2) defer stmt.Close() fmt.Println(rs.RowsAffected()) } /** * */ func testDeleteData(db *sql.DB) { var deleteSql string = "DELETE FROM baiyi_user WHERE user_id=?" stmt, err := db.Prepare(deleteSql) mypath.Check(err) rs, err := stmt.Exec(2) defer stmt.Close() fmt.Println(rs.RowsAffected()) } /** *返回字符串的MD5值 */ func md5Value(source string) string { md5Instnace := md5.New() md5Data := md5Instnace.Sum([]byte(source)) return hex.EncodeToString(md5Data) } /** *返回结果包装 */ type ResponseData struct { StatusCode int Info string } /** *注册操作 */ func register(username string, password string, db *sql.DB) ResponseData { if checkIsExistUser(username, db) { resp := ResponseData{} resp.StatusCode=400 resp.Info = "用户存在" return resp } md5Pwd := md5Value(password) insertSql := "INSERT INTO baiyi_user(user_name, user_password) VALUES (?,?)" rs, err := db.Exec(insertSql, username, md5Pwd) mypath.Check(err) if effectedRow, err :=rs.RowsAffected();effectedRow>0 { mypath.Check(err) resp := ResponseData{} resp.StatusCode=200 resp.Info = "注册成功" return resp } return makeResponse(500, "意料之外的错误") } /** *检查用户名是否存在 */ func checkIsExistUser(username string, db *sql.DB) bool{ querlSql := "SELECT user_id FROM baiyi_user WHERE user_name=?" rows, err := db.Query(querlSql, username) mypath.Check(err) defer rows.Close() return rows.Next() } /** *登录操作 */ func login(username string, password string, db *sql.DB) ResponseData { if !checkIsExistUser(username, db) { return makeResponse(400, "该用户不存在,请注册") } sql := "SELECT user_id FROM baiyi_user WHERE user_name=? AND user_password=? LIMIT 1" rows, err := db.Query(sql, username,md5Value(password)) mypath.Check(err) if rows.Next() { return makeResponse(200, "登录成功") } return makeResponse(200, "密码错误") } /* *生成对象 */ func makeResponse(code int, info string) ResponseData { resp := ResponseData{} resp.StatusCode=code resp.Info = info return resp }
总结
- go操作mysql
打卡时间: 21:04
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网页设计创意书(卷2)
麦克尼尔 / 图灵编辑部 / 人民邮电 / 2012-1 / 49.00元
《网页设计创意书(卷2)》是《网页设计创意书》的卷2,但并非其简单补充,而是作者基于近几年网站发展新趋势的再创作。《网页设计创意书(卷2)》先讲解了如何从他人的优秀设计中寻找灵感,接着阐述了重点、对比、平衡、对齐等网站设计的基本原则,然后将网站按类型、设计元素、风格和主题、结构样式和结构元素分类,并分章介绍了每一类的设计技巧。《网页设计创意书(卷2)》语言简练,结合作者精挑细选的网站实例,通俗易懂......一起来看看 《网页设计创意书(卷2)》 这本书的介绍吧!