step1:導包
"database/sql"
_ "github.com/go-sql-driver/mysql"
step2:打開數據庫,建立連接
db,_:=sql.Open("mysql","root:xxx@tcp(127.0.0.1:3306)/my1802?charset=utf8") // xxx是密碼
step3:操作數據庫:
stmt_:=db.Prepare("sql .... ?,?")
result,_:=stmt.Exec(給?賦值)
step4:操作結果對象
result.LastIndexId()-->int64
result.RowsAffected()-->int64
step5:關閉資源
stmt.Close()
db.Close()
package main // step1:導入包 import ( "database/sql" _"github.com/go-sql-driver/mysql" "fmt" ) func main() { // step2:打開數據庫,相當於和數據庫建立連接:db對象 /* func Open(driverName, dataSourceName string) (*DB, error) drvierName,"mysql" dataSourceName,用戶名:密碼@協議(地址:端口)/數據庫?參數=參數值 */ db,err:=sql.Open("mysql","root:hanru1314@tcp(127.0.0.1:3306)/my1802?charset=utf8") if err !=nil{ fmt.Println("連接失敗。。") return } //step3:插入一條數據 stmt,err:=db.Prepare("INSERT INTO emp(empno,ename,job,hiredate,sal) values(?,?,?,?,?)") if err !=nil{ fmt.Println("操作失敗。。") } //補充完整sql語句,並執行 result,err:=stmt.Exec(9530,"小鑽風","巡山","2018-04-21",30.8) if err !=nil{ fmt.Println("插入數據失敗。。") } //step4:處理sql操作後的結果 lastInsertId,err:=result.LastInsertId() rowsAffected,err:=result.RowsAffected() fmt.Println("lastInsertId",lastInsertId) fmt.Println("影響的行數:", rowsAffected) //再次插入數據: result,_=stmt.Exec(9531,"白骨精","巡山","2017-11-11",50.8) count,_:=result.RowsAffected() fmt.Println("影響的行數:",count) //step5:關閉資源 stmt.Close() db.Close() }
查詢數據庫:DQL語言
step1:同上,導入包
step2:同上,建立連接
step3:查詢
rows,err:=db.Query("select....",佔位符的替換的值)
step4:處理查詢到的數據
rows.Colums()-->查詢到的字段的名字 []string
rows.Next()-->bool,判斷是否有下一個數值
rows.Scan(&變量名,&....)
package main //step1:導入包 import ( "database/sql" _ "github.com/go-sql-driver/mysql" "fmt" ) type Emp struct { Empno int Ename string Job string Hiredate string Sal float64 Deptno int } func main() { /* 查詢操作: */ //step2:打開數據庫,建立連接 db,_ := sql.Open("mysql","root:hanru1314@tcp(127.0.0.1:3306)/my1802?charset=utf8") //stpt3:查詢數據庫 rows,err:=db.Query("SELECT empno,ename,job,hiredate,sal,deptno FROM emp WHERE deptno=?",30) fmt.Println("--->",err.Error()) fmt.Println(rows.Columns()) //[empno ename job hiredate sal deptno] //思路一:定義一個map,用於存儲從數據庫中查詢出來的數據,字段作爲key,string,數據作爲value,任意類型,空接口 map1:=make(map[string]interface{}) datas := make([] map[string]interface{},0) //思路二:創建slice,存入struct, datas2:=make([] Emp,0) //step4:操作結果集獲取數據 for rows.Next(){ var empno int var ename string var job string var hiredate string var sal float64 var deptno int if err:=rows.Scan(&empno,&ename,&job,&hiredate,&sal,&deptno);err!=nil{ fmt.Println("獲取失敗。。") } //fmt.Println(empno,ename,job,hiredate,sal,deptno) //將讀取到的數據,存入了map中 map1["empno"]=empno map1["ename"]=ename map1["job"]=job map1["hiredate"]=hiredate map1["sal"]=sal map1["deptno"]=deptno //將map存入切片中 datas = append(datas,map1) //思路二:每讀取一行,創建一個emp對象,存入datas2中 emp := Emp{empno,ename,job,hiredate,sal,deptno} datas2 =append(datas2, emp) } //step5:關閉資源 rows.Close() db.Close() //遍歷切片 //fmt.Println("empno\tename\tjob\thiredate\tsal\tdeptno") //for _,v:=range datas{ // for _,val:=range v{ // fmt.Print(val,"\t") //} //fmt.Println() // //} for _,v:=range datas2{ fmt.Println(v) } }