golang操作mysql数据库
Posted 追风逐月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang操作mysql数据库相关的知识,希望对你有一定的参考价值。
golang操作mysql数据库
代码: mysql的增、删、改、查
package main import ( "database/sql" "fmt" "strconv" "time" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:[email protected](10.99.2.153:3306)/xes_nrcp?charset=utf8") defer db.Close() checkErr(err) //插入数据 insert(21, db) //删除数据 delete(14, db) //更新数据 update(15, "设计部门", db) //查询数据 get(db) } func checkErr(err error) { if err != nil { panic(err) } } func get(db *sql.DB) { rows, _ := db.Query("SELECT * FROM aaa_test") cloumns, _ := rows.Columns() //获取列字段 for _, cloumn := range cloumns { fmt.Print(cloumn + " ") } fmt.Println() //遍历返回结果 for rows.Next() { rows.Scan(&cloumns[0], &cloumns[1], &cloumns[2], &cloumns[3]) fmt.Println(cloumns[0], cloumns[1], cloumns[2], cloumns[3]) } } func insert(id int, db *sql.DB) { //插入数据方式 stmt, _ := db.Prepare("INSERT aaa_test SET id=?,nameA=?,descA=?") res, _ := stmt.Exec(id, "研发部门", "2012-12-09", time.Now()) resID, _ := res.LastInsertId() fmt.Println(resID) //or // stmt, _ := db.Prepare("INSERT aaa_test (id,nameA,descA,createTime)values (?,?,?,?)") // res, _ := stmt.Exec(17, "研发部门", "2012-12-09", time.Now()) // id, _ := res.LastInsertId() // fmt.Println(id) //or // res, _ := db.Exec("INSERT aaa_test (id,nameA,descA)values (?,?,?)", 18, "研发部门", "2012-12-09") // id, _ := res.LastInsertId() // fmt.Println(id) //or // db.Exec("INSERT aaa_test (id,nameA,descA,createTime)values (?,?,?,?)", 14, "qwe", "2012-12-09", time.Now()) //or //db.Exec("INSERT aaa_test SET id=?,nameA=?,descA=?,createTime=?", id, "研发部门", "写写代码", time.Now()) } func delete(id int, db *sql.DB) { stmt, err := db.Prepare("delete from aaa_test where id=?") checkErr(err) res, err := stmt.Exec(id) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println("删除数据影响行数:" + strconv.FormatInt(affect, 10)) } func update(id int, name string, db *sql.DB) { stmt, err := db.Prepare("update aaa_test set nameA=? where id=?") checkErr(err) res, err := stmt.Exec(name, id) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println(affect) }
sql.Open()函数用来打开一个注册过的数据库驱动,go-sql-driver中注册了mysql这个数据库驱动,第二个参数是DSN(Data Source Name),它是go-sql-driver定义的一些数据库链接和配置信息。它支持如下格式:
[email protected]unix(/path/to/socket)/dbname?charset=utf8
user:[email protected]tcp(localhost:5555)/dbname?charset=utf8
user:[email protected]/dbname
user:[email protected]tcp([de:ad:be:ef::ca:fe]:80)/dbname
db.Prepare()函数用来返回准备要执行的sql操作,然后返回准备完毕的执行状态。
db.Query()函数用来直接执行Sql返回Rows结果。
stmt.Exec()函数用来执行stmt准备好的SQL语句
我们可以看到我们传入的参数都是=?对应的数据,这样做的方式可以一定程度上防止SQL注入。
以上是关于golang操作mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章
golang goroutine例子[golang并发代码片段]