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

}

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