package main
import (
"RDSMySQL/common"
"database/sql"
"fmt"
"github.com/pkg/errors"
"log"
)
func checkError(err error) {
if err != nil {
log.Printf("%+v", err)
}
}
type animals struct {
id int
age int
name string
}
func main() {
db := common.GetDb()
defer db.Close()
err := createTable(db)
if err != nil {
log.Printf("%+v", err)
return
}
err = insertRowDemo(db)
if err != nil {
log.Printf("%+v", err)
return
}
err = updateRowDemo(db)
if err != nil {
log.Printf("%+v", err)
return
}
err = deleteRowDemo(db)
if err != nil {
log.Printf("%+v", err)
return
}
err = queryRowDemo(db)
if err != nil {
log.Printf("%+v", err)
return
}
err = queryMultiRowDemo(db)
if err != nil {
log.Printf("%+v", err)
return
}
}
func createTable(db *sql.DB) error {
_, err := db.Exec("CREATE TABLE animals (id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,name VARCHAR(20) DEFAULT NULL,age NUMERIC(2) DEFAULT 0,);")
if err != nil {
return errors.Wrap(err, "ERR: fail to createTable")
}
return nil
}
func insertRowDemo(db *sql.DB) error {
sqlStr := "insert into animals(name, age) values (?,?)"
_, err := db.Exec(sqlStr, "老虎", 3)
if err != nil {
return errors.Wrap(err, "ERR: fail to insertRow")
}
return nil
}
func updateRowDemo(db *sql.DB) error {
sqlStr := "update animals set age=? where id = ?"
ret, err := db.Exec(sqlStr, 39, 1)
if err != nil {
return errors.Wrap(err, "ERR: fail to updateRow")
}
n, err := ret.RowsAffected()
if err != nil {
return errors.Wrap(err, "ERR: fail to get rows")
}
fmt.Printf("update success, affected rows:%d\n", n)
return nil
}
func deleteRowDemo(db *sql.DB) error {
sqlStr := "delete from animals where id = ?"
ret, err := db.Exec(sqlStr, 3)
if err != nil {
return errors.Wrap(err, "ERR: fail to deleteRow")
}
n, err := ret.RowsAffected()
if err != nil {
return errors.Wrap(err, "ERR: fail to get rows")
}
fmt.Printf("delete success, affected rows:%d\n", n)
return nil
}
func queryRowDemo(db *sql.DB) error {
sqlStr := "select id, name, age from animals where id=?"
var u animals
err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age)
if err != nil {
return errors.Wrap(err, "ERR: fail to queryRow")
}
fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age)
return nil
}
func queryMultiRowDemo(db *sql.DB) error {
sqlStr := "select id, name, age from animals where id > ?"
rows, err := db.Query(sqlStr, 0)
if err != nil {
return errors.Wrap(err, "ERR: fail to queryRow")
}
defer rows.Close()
for rows.Next() {
var u animals
err := rows.Scan(&u.id, &u.name, &u.age)
if err != nil {
return errors.Wrap(err, "ERR: fail to scan row")
}
fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age)
}
return nil
}