Go 操作数据库

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

// 定义表字段
type user struct {
	id   int
	name string
	age  int
}

var db *sql.DB

// 初始化函数
func initDB() (err error) {

	dsn := "root:123456@tcp(122.51.115.136:3306)/sql_test"
// 初始化不能使用 := 因为要使用全局定义的db,切记切记。还记得这个问题你卡了半天吗?????????????????????????????????????????????????????????????? db, err = sql.Open("mysql", dsn) if err != nil { return } err = db.Ping() if err != nil { return } // 设置数据库最大连接数 db.SetMaxOpenConns(10) // 设置最大空闲连接数 db.SetMaxIdleConns(5) return } // 查询单行A func queryOne(n int) { // initDB() var u1 user sqlStr := `select id,name,age from user where id=?` db.QueryRow(sqlStr, n).Scan(&u1.id, &u1.name, &u1.age) fmt.Println(u1) } // 查询多行 func queryMore(n int) { // initDB() sqlStr := `select id,name,age from user where id > ?` rowsObj, err := db.Query(sqlStr, n) if err != nil { fmt.Printf("exec %s query failed,err:%v", sqlStr, err) return } defer rowsObj.Close() for rowsObj.Next() { var u user err := rowsObj.Scan(&u.id, &u.name, &u.age) if err != nil { fmt.Printf("scan failed, err:%v\n", err) } fmt.Println(u) } } // 插入数据 func insert() { sqlStr := `insert into user(name,age) values("李阳",31)` // 执行语句A ret, err := db.Exec(sqlStr) if err != nil { fmt.Printf("insert failed,err:%v\n", err) return } // 如果插入数据的操作,能够拿到插入的id id, err := ret.LastInsertId() if err != nil { fmt.Printf("get id failed,err:%v\n", err) } fmt.Println("id:", id) } // 更新数据 func updateRow(newAge int, id int) { sqlStr := `update user set age=? where id=?` ret, err := db.Exec(sqlStr, newAge, id) if err != nil { fmt.Printf("update failed,err:%v\n", err) return } // 操作影响的行数 n, err := ret.RowsAffected() if err != nil { fmt.Printf("get id failed, err:%v\n", err) return }A fmt.Printf("更新了%d行数据\n", n) } // 删除数据 func deleteRow(id int) { sqlStr := `delete from user where id=?` ret, err := db.Exec(sqlStr, id) if err != nil { fmt.Printf("delete failed,err:%v\n", err) return } n, err := ret.RowsAffected() if err != nil { fmt.Printf("get id failed, err:%v\n", err) return } fmt.Printf("删除了%d行数据\n", n) } func main() { initDB() // queryOne(2) // queryMore(0) // insert() // queryOne(4) // updateRow(1001, 4) // queryOne(4) queryMore(0) deleteRow(4) queryMore(0) }

  

posted @ 2020-06-14 22:57  枯藤老艹树  阅读(230)  评论(0编辑  收藏  举报