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)
}
}