package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
/*
sql.Open("drivename","username:password@tcp(host:port)/dbname?")
fmt.Sprintf("%s:%s@tcp(%s:%d)/dbname",user,pass,host,port)
db.Query("select * from ts1") retun *rows/err
db.QueryRow("select * from ts1") return *row/err
PrePare 准备一个数据库query操作,返回一个*Stmt
Stmt的主要方法:Exec 执行不返回任何rows的数据库语句(delete),Query,QueryRow,Close
rows的主要用法:Columns return []string,Scan,Next,Close */
func main() {
// 连接数据库
db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test") //return *sql.DB err
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer db.Close()
// 执行增加
insert(db)
// 执行修改
update(db)
// 查询结果
rows, err := db.Query("select id, name,age from ts1 ")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
var id int
var name string
var age int
for rows.Next() {
err := rows.Scan(&id, &name, &age)
if err == nil {
fmt.Println(id, name, age)
}
}
//执行删除
delete(db)
}
// 插入数据
func insert(db *sql.DB) {
stmt, err := db.Prepare("INSERT INTO ts1(id, name,age) VALUES(?,?,?)")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer stmt.Close()
// result, err := smt.Exec("huyao", pwd, time.Now().Format("2006-01-02 15:04:05"))
stmt.Exec("3", "hello", "5")
}
// 修改数据
func update(db *sql.DB) {
stmt, err := db.Prepare("update ts1 set age=15 where id=3")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer stmt.Close()
// result, err := smt.Exec("huyao", pwd, time.Now().Format("2006-01-02 15:04:05"))
stmt.Exec()
}
// 删除数据
func delete(db *sql.DB) {
stmt, err := db.Prepare("delete from ts1 where id = 3")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer stmt.Close()
// result, err := smt.Exec("huyao", pwd, time.Now().Format("2006-01-02 15:04:05"))
stmt.Exec()
}
// 插入、修改或删除时,首先判定要操作的数值是否存在。 需要把要判定的值放入map中 _,ok:=map[key]
func judge(db *sql.DB) map[string]interface{} {
var m = map[string]interface{}{}
rows, _ := db.Query("select * from ts1")
var id, name, age string
for rows.Next() {
err := rows.Scan(&id, &name, &age)
if err == nil {
m[id] = name
}
}
return m
}
//取得数据的某一列的值
func column(db *sql.DB) {
results, _ := db.Query("SHOW SLAVE STATUS")
columns, _ := results.Columns()
values := make([]sql.RawBytes, len(columns))
scanArgs := make([]interface{}, len(values))
for i := range values {
scanArgs[i] = &values[i]
}
//problem here can print next no
var value string
for results.Next() {
err := results.Scan(scanArgs...)
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
for i, col := range values {
if col == nil {
value = "null"
} else {
value = string(col)
}
fmt.Print(columns[i], value)
}
}
}
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
/*
sql.Open("drivename","username:password@tcp(host:port)/dbname?")
fmt.Sprintf("%s:%s@tcp(%s:%d)/dbname",user,pass,host,port)
db.Query("select * from ts1") retun *rows/err
db.QueryRow("select * from ts1") return *row/err
PrePare 准备一个数据库query操作,返回一个*Stmt
Stmt的主要方法:Exec 执行不返回任何rows的数据库语句(delete),Query,QueryRow,Close
rows的主要用法:Columns return []string,Scan,Next,Close */
func main() {
// 连接数据库
db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test") //return *sql.DB err
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer db.Close()
// 执行增加
insert(db)
// 执行修改
update(db)
// 查询结果
rows, err := db.Query("select id, name,age from ts1 ")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
var id int
var name string
var age int
for rows.Next() {
err := rows.Scan(&id, &name, &age)
if err == nil {
fmt.Println(id, name, age)
}
}
//执行删除
delete(db)
}
// 插入数据
func insert(db *sql.DB) {
stmt, err := db.Prepare("INSERT INTO ts1(id, name,age) VALUES(?,?,?)")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer stmt.Close()
// result, err := smt.Exec("huyao", pwd, time.Now().Format("2006-01-02 15:04:05"))
stmt.Exec("3", "hello", "5")
}
// 修改数据
func update(db *sql.DB) {
stmt, err := db.Prepare("update ts1 set age=15 where id=3")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer stmt.Close()
// result, err := smt.Exec("huyao", pwd, time.Now().Format("2006-01-02 15:04:05"))
stmt.Exec()
}
// 删除数据
func delete(db *sql.DB) {
stmt, err := db.Prepare("delete from ts1 where id = 3")
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
defer stmt.Close()
// result, err := smt.Exec("huyao", pwd, time.Now().Format("2006-01-02 15:04:05"))
stmt.Exec()
}
// 插入、修改或删除时,首先判定要操作的数值是否存在。 需要把要判定的值放入map中 _,ok:=map[key]
func judge(db *sql.DB) map[string]interface{} {
var m = map[string]interface{}{}
rows, _ := db.Query("select * from ts1")
var id, name, age string
for rows.Next() {
err := rows.Scan(&id, &name, &age)
if err == nil {
m[id] = name
}
}
return m
}
//取得数据的某一列的值
func column(db *sql.DB) {
results, _ := db.Query("SHOW SLAVE STATUS")
columns, _ := results.Columns()
values := make([]sql.RawBytes, len(columns))
scanArgs := make([]interface{}, len(values))
for i := range values {
scanArgs[i] = &values[i]
}
//problem here can print next no
var value string
for results.Next() {
err := results.Scan(scanArgs...)
if err != nil {
fmt.Println("Open database error: %s\n", err)
return
}
for i, col := range values {
if col == nil {
value = "null"
} else {
value = string(col)
}
fmt.Print(columns[i], value)
}
}
}