mysql_example
- package main
- import (
- "database/sql"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- )
- var DB *sql.DB
- func initDb() error {
- var err error
- dsn := "root:root@tcp(localhost:3306)/golang_db"
- DB, err = sql.Open("mysql", dsn)
- if err != nil {
- return err
- }
- DB.SetMaxOpenConns()
- DB.SetMaxIdleConns()
- return nil
- }
- type User struct {
- Id int64 `db:"id"`
- Name sql.NullString `db:"string"`
- Age int `db:"age"`
- }
- func testQueryMultilRow() {
- sqlstr := "select id, name, age from user where id > ?"
- rows, err := DB.Query(sqlstr, )
- //重点关注, rows对象一定要close掉
- defer func() {
- if rows != nil {
- rows.Close()
- }
- }()
- if err != nil {
- fmt.Printf("query failed, err:%v\n", err)
- return
- }
- for rows.Next() {
- var user User
- err := rows.Scan(&user.Id, &user.Name, &user.Age)
- if err != nil {
- fmt.Printf("scan failed, err:%v\n", err)
- return
- }
- fmt.Printf("user:%#v\n", user)
- }
- }
- func testQueryData() {
- for i := ; i < ; i++ {
- fmt.Printf("query %d times\n", i)
- sqlstr := "select id, name, age from user where id=?"
- row := DB.QueryRow(sqlstr, )
- /*if row != nil {
- continue
- }*/
- var user User
- err := row.Scan(&user.Id, &user.Name, &user.Age)
- if err != nil {
- fmt.Printf("scan failed, err:%v\n", err)
- return
- }
- fmt.Printf("id:%d name:%v age:%d\n", user.Id, user.Name, user.Age)
- }
- }
- func testInsertData() {
- sqlstr := "insert into user(name, age) values(?, ?)"
- result, err := DB.Exec(sqlstr, "tom", )
- if err != nil {
- fmt.Printf("insert failed, err:%v\n", err)
- return
- }
- id, err := result.LastInsertId()
- if err != nil {
- fmt.Printf("get last insert id failed, err:%v\n", err)
- return
- }
- fmt.Printf("id is %d\n", id)
- }
- func testUpdateData() {
- sqlstr := "update user set name=? where id=?"
- result, err := DB.Exec(sqlstr, "jim", )
- if err != nil {
- fmt.Printf("insert failed, err:%v\n", err)
- return
- }
- affected, err := result.RowsAffected()
- if err != nil {
- fmt.Printf("get affected rows failed, err:%v\n", err)
- }
- fmt.Printf("update db succ, affected rows:%d\n", affected)
- }
- func testDeleteData() {
- sqlstr := "delete from user where id=?"
- result, err := DB.Exec(sqlstr, )
- if err != nil {
- fmt.Printf("insert failed, err:%v\n", err)
- return
- }
- affected, err := result.RowsAffected()
- if err != nil {
- fmt.Printf("get affected rows failed, err:%v\n", err)
- }
- fmt.Printf("delete db succ, affected rows:%d\n", affected)
- }
- func testPrepareData() {
- sqlstr := "select id, name, age from user where id > ?"
- stmt, err := DB.Prepare(sqlstr)
- if err != nil {
- fmt.Printf("prepare failed, err:%v\n", err)
- return
- }
- defer func() {
- if stmt != nil {
- stmt.Close()
- }
- }()
- rows, err := stmt.Query()
- //重点关注, rows对象一定要close掉
- defer func() {
- if rows != nil {
- rows.Close()
- }
- }()
- if err != nil {
- fmt.Printf("query failed, err:%v\n", err)
- return
- }
- for rows.Next() {
- var user User
- err := rows.Scan(&user.Id, &user.Name, &user.Age)
- if err != nil {
- fmt.Printf("scan failed, err:%v\n", err)
- return
- }
- fmt.Printf("user:%#v\n", user)
- }
- }
- func testPrepareInsertData() {
- sqlstr := "insert into user(name, age) values(?, ?)"
- stmt, err := DB.Prepare(sqlstr)
- if err != nil {
- fmt.Printf("insert failed, err:%v\n", err)
- return
- }
- defer func() {
- if stmt != nil {
- stmt.Close()
- }
- }()
- result, err := stmt.Exec("jim", )
- id, err := result.LastInsertId()
- if err != nil {
- fmt.Printf("get last insert id failed, err:%v\n", err)
- return
- }
- fmt.Printf("id is %d\n", id)
- }
- func testTrans() {
- conn, err := DB.Begin()
- if err != nil {
- if conn != nil {
- conn.Rollback()
- }
- fmt.Printf("begin failed, err:%v\n", err)
- return
- }
- sqlstr := "update user set age = 1 where id = ?"
- _, err = conn.Exec(sqlstr, )
- if err != nil {
- conn.Rollback()
- fmt.Printf("exec sql:%s failed, err:%v\n", sqlstr, err)
- return
- }
- sqlstr = "update user set age = 2 where id = ?"
- _, err = conn.Exec(sqlstr, )
- if err != nil {
- conn.Rollback()
- fmt.Printf("exec second sql:%s failed, err:%v\n", sqlstr, err)
- return
- }
- err = conn.Commit()
- if err != nil {
- fmt.Printf("commit failed, err:%v\n", err)
- conn.Rollback()
- return
- }
- }
- func main() {
- err := initDb()
- if err != nil {
- fmt.Printf("init db failed, err:%v\n", err)
- return
- }
- //testQueryData()
- //testQueryMultilRow()
- //testInsertData()
- //testUpdateData()
- //testDeleteData()
- //testPrepareData()
- //testPrepareInsertData()
- testTrans()
- }
- package main
- import (
- "database/sql"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/jmoiron/sqlx"
- )
- var DB *sqlx.DB
- func initDb() error {
- var err error
- dsn := "root:root@tcp(localhost:3306)/golang_db"
- DB, err = sqlx.Open("mysql", dsn)
- if err != nil {
- return err
- }
- DB.SetMaxOpenConns()
- DB.SetMaxIdleConns()
- return nil
- }
- type User struct {
- Id int64 `db:"id"`
- Name sql.NullString `db:"name"`
- Age int `db:"age"`
- }
- func testQuery() {
- sqlstr := "select id, name, age from user where id=?"
- var user User
- err := DB.Get(&user, sqlstr, )
- if err != nil {
- fmt.Printf("get failed, err:%v\n", err)
- return
- }
- fmt.Printf("user:%#v\n", user)
- }
- func testQueryMulti() {
- sqlstr := "select id, name, age from user where id>?"
- var user []User
- err := DB.Select(&user, sqlstr, )
- if err != nil {
- fmt.Printf("get failed, err:%v\n", err)
- return
- }
- fmt.Printf("user:%#v\n", user)
- }
- func testUpdate() {
- sqlstr := "update user set name=? where id=?"
- result, err := DB.Exec(sqlstr, "abc", )
- if err != nil {
- fmt.Printf("update failed, err:%v\n", err)
- return
- }
- count, err := result.RowsAffected()
- if err != nil {
- fmt.Printf("affected rows failed, err:%v\n", err)
- return
- }
- fmt.Printf("affect rows:%d\n", count)
- }
- func queryDB(name string) {
- sqlstr := fmt.Sprintf("select id, name, age from user where name='%s'", name)
- fmt.Printf("sql:%s\n", sqlstr)
- var user []User
- err := DB.Select(&user, sqlstr)
- if err != nil {
- fmt.Printf("select failed, err:%v\n", err)
- return
- }
- for _, v := range user {
- fmt.Printf("user:%#v\n", v)
- }
- }
- func queryDBBySqlx(name string) {
- sqlstr := "select id, name, age from user where name=?"
- //fmt.Printf("sql:%s\n", sqlstr)
- var user []User
- err := DB.Select(&user, sqlstr, name)
- if err != nil {
- fmt.Printf("select failed, err:%v\n", err)
- return
- }
- for _, v := range user {
- fmt.Printf("user:%#v\n", v)
- }
- }
- func testSqlInject() {
- //queryDB("abc' or 1 = 1 #")
- //queryDB("name=abc' and (select count(*) from user ) < 10#")
- //queryDB("name=123' union select *from user #")
- queryDBBySqlx("name=123' union select *from user #")
- }
- func main() {
- err := initDb()
- if err != nil {
- fmt.Printf("init db failed, err:%v\n", err)
- return
- }
- //testQuery()
- //testQueryMulti()
- //testUpdate()
- testSqlInject()
- }
mysql_example的更多相关文章
随机推荐
- loj6005 [网络流24题]最长递增子序列
题意:给你一个序列,求不严格上升lcs长度/最多有几个没有重复元素的lcs/如果x1和xn可以多次出现,求最多有几个lcs?n<=500. 标程: #include<cstdio> ...
- js获取base64格式图片预览上传并用php保存到本地服务器指定文件夹
html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- shell与crontab定时器的结合
crond服务 以守护进程方式在无需人工干预的情况下来处理一些列的作业指令与服务 查看服务状态 systemctl status cron.service 停止服务 systemctl stop cr ...
- 关于promise的用法
promise是一个对象,里面保存着某个未来才会结束的事件,通常是一个异步事件. promise对象的两个特点: 1.对象的状态不受外界影响:pending(进行中) fulfilled(已成功) r ...
- python中检测mysql的主键唯一性异常
有两种方法: 1.直接检测是什么异常(查mysql文档找出异常代码) import os import mysql_operate.mysql_connect as mysql import re d ...
- js图片预加载实现!
var myImage = (function(){ var imgNode = document.createElement( 'img' ); document.body.appendChild( ...
- zuul隔离机制
文章转载自:https://blog.csdn.net/farsight1/article/details/80078099 ZuulException REJECTED_SEMAPHORE_EXEC ...
- php析构函数小结
l 基本语法 class 类名{ public function __destruct(){ //函数体 //析构函数的最重要的作用,就是释放对象创建的资源 //比如 数据库连接, 文件句柄, ...
- PKUOJ 区间内的真素数
http://bailian.openjudge.cn/tm2018/A/ #include <iostream> #include <math.h> #include < ...
- Cmp- Linux必学的60个命令
1.作用 cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户. 2.格式 cmp[options] 文件名 3.[options]主要参数 -l: 将字节以 ...