Go 練習02.操作MySQL

database/sql 包提供了保證SQL數據庫的接口,並不提供數據庫驅動。

需要自行下載數據庫驅動。

數據庫驅動

$ go get -u github.com/go-sql-driver/mysql

連接數據庫

  • sql.Open(“mysql”,“root:123456@(127.0.0.1:3306)/test”)
package main

import (
    "fmt"
    
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db,_ := sql.Open("mysql","username:123456@(127.0.0.1:3306)/test")
	defer db.Close()

	err := db.Ping()
	if err != nil {
		fmt.Println("Failed to Ping db, error: %s",err.Error())
		return
	}
	fmt.Println("Success: conn to db")
    
    
}

練習

創建表
mysql> create table stu (
    -> id int primary key,
    -> name varchar(10)
    -> );

添加執行插入語句的代碼

func main {
    
    ...
    
    sql := "insert into stu values (7,'tom7')"
    result,_ := db.Exec(sql)
    n , _ := result.RowsAffected() //受影響的記錄數
    fmt.Println(n)
    
    ...
    
}   

執行預處理

// 執行預處理
func main {
    
    ...
    
    stu := [3][2] string{{"8","tom8"},{"9","tom9"},{"10","tom10"} }
    stmt,_:= db.Prepare("insert into stu value (?,?)")
    defer stmt.Close()

    for _ , s := range stu {
    	stmt.Exec(s[0],s[1])
    }
    
    ...
    
}   

查詢

// QueryRow 只查詢一行
var id,name string
rows := db.QueryRow("select * from stu") 
rows.Scan(&id,&name)                     // 將數據存入到id name中
fmt.Println(id,name)

// Query 獲取多行數據
rows,_ := db.Query("select * from stu")
var id,name string
for rows.Next() { // rows.Next() 如果沒有數據了 則返回false
    rows.Scan(&id,&name)
    fmt.Println(id,name)
}

代碼

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db,_ := sql.Open("mysql","username:123456@(127.0.0.1:3306)/test")
	defer db.Close()

	err := db.Ping()
	if err != nil {
		fmt.Println("Failed to Ping db, error: %s",err.Error())
		return
	}

	fmt.Println("Success: conn to db")

	//// 執行一條語句
	//sql := "insert into stu values (7,'tom7')"
	//result,_ := db.Exec(sql)
	//n , _ := result.RowsAffected() //受影響的記錄數
	//fmt.Println(n)

	//// 執行預處理
	//stu := [3][2] string{{"8","tom8"},{"9","tom9"},{"10","tom10"} }
	//stmt,_:= db.Prepare("insert into stu value (?,?)")
	//defer stmt.Close()
	//
	//for _ , s := range stu {
	//	stmt.Exec(s[0],s[1])
	//}

	// 查詢一行
	//var id,name string
	//rows := db.QueryRow("select * from stu")
	//rows.Scan(&id,&name)
	//fmt.Println(id,name)

	// 查詢多行
	rows,_ := db.Query("select * from stu")
	var id,name string
	for rows.Next() {
		rows.Scan(&id,&name)
		fmt.Println(id,name)
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章