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来保存查询出来的每一行的值,在实际开发中通常会封装数据库的操作,对这样的查询通常会考虑返回字典类型,代码如下:
//构造scanArgs、values两个数组,scanArgs的每个值指向values相应值的地址 columns, _ := rows.Columns() scanArgs := make([]interface{}, len(columns)) values := make([]interface{}, len(columns)) for i := range values { scanArgs[i] = &values[i] }
for rows.Next() { //将行数据保存到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) 修改和删除操作都比较简单,同插入数据类似,只是使用RowsAffected来获取影响的数据行数,完整代码如下:
//字典类型 //构造scanArgs、values两个数组,scanArgs的每个值指向values相应值的地址 columns, _ := rows.Columns() scanArgs := make([]interface{}, len(columns)) values := make([]interface{}, len(columns)) for i := range values { scanArgs[i] = &values[i] }
for rows.Next() { //将行数据保存到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) } }