rows, err := db.Query("SELECT * FROM user") checkErr(err)
for rows.Next() { var userId int var userName string var userAge int var userSex int rows.Columns() err = rows.Scan(&userId, &userName, &userAge, &userSex) checkErr(err) fmt.Println(userId) fmt.Println(userName) fmt.Println(userAge) fmt.Println(userSex) } 這里查詢的方式使用聲明4個獨立變量userId、userName、userAge、userSex來保存查詢出來的每一行的值,在實際開發(fā)中通常會封裝數(shù)據(jù)庫的操作,對這樣的查詢通常會考慮返回字典類型,代碼如下:
//構(gòu)造scanArgs、values兩個數(shù)組,scanArgs的每個值指向values相應(yīng)值的地址 columns, _ := rows.Columns() scanArgs := make([]interface{}, len(columns)) values := make([]interface{}, len(columns)) for i := range values { scanArgs[i] = &values[i] }
for rows.Next() { //將行數(shù)據(jù)保存到record字典 err = rows.Scan(scanArgs...) record := make(map[string]string) for i, col := range values { if col != nil { record[columns[i]] = string(col.([]byte)) } } fmt.Println(record) } 修改操作:
stmt, err := db.Prepare(`UPDATE user SET user_age=?,user_sex=? WHERE user_id=?`) checkErr(err) res, err := stmt.Exec(21, 2, 1) checkErr(err) num, err := res.RowsAffected() checkErr(err) fmt.Println(num) 刪除操作:
stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`) checkErr(err) res, err := stmt.Exec(1) checkErr(err) num, err := res.RowsAffected() checkErr(err) fmt.Println(num) 修改和刪除操作都比較簡單,同插入數(shù)據(jù)類似,只是使用RowsAffected來獲取影響的數(shù)據(jù)行數(shù),完整代碼如下:
//字典類型 //構(gòu)造scanArgs、values兩個數(shù)組,scanArgs的每個值指向values相應(yīng)值的地址 columns, _ := rows.Columns() scanArgs := make([]interface{}, len(columns)) values := make([]interface{}, len(columns)) for i := range values { scanArgs[i] = &values[i] }
for rows.Next() { //將行數(shù)據(jù)保存到record字典 err = rows.Scan(scanArgs...) record := make(map[string]string) for i, col := range values { if col != nil { record[columns[i]] = string(col.([]byte)) } } fmt.Println(record) } }