//根据数据源dsn和mysql驱动, 创建数据库对象 pool, err := sqlx.Open("mysql", dsn) if err != nil { panic(err) }
MYSQL dsn格式:{username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local 注意:charset=utf8 用于设置字符集,parseTime=True表示将数据库时间类型转换成Go时间类型
// 查询所有的数据,这里返回的是sqlx.Rows对象 rows, err := pool.Queryx("SELECT country, city, telcode FROM place") //错误检测 if err !=nil { panic(err) }
// 循环遍历每一行记录,rows.Next()函数用于判断是否还有下一行数据 for rows.Next() { //这里定义三个变量用于接收每一行数据 var country string var city string var telcode int //调用Scan函数,将当记录的数据保存到变量中,这里参数的顺序跟上面sql语句中select后面的字段顺序一致。 err = rows.Scan(&country, &city, &telcode) }
// 另外,rows 对象支持将每一行数据保存到 struct、map或者数组中 //遍历数据 for rows.Next() { //下面演示如何将数据保存到struct、map和数组中 //定义struct对象 var p Place //定义map类型 m := make(map[string]interface{}) //定义slice类型 s := make([]interface{}, 0) //使用StructScan函数将当前记录的数据保存到struct对象中 err = rows.StructScan(&p) //保存到map err = rows.MapScan(&m) //保存到数组 err = rows.SliceScan(&s) }
QueryRows 返回一行数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14
//查询数据 row, err := pool.QueryRowx("SELECT country, city, telcode FROM place where id = ?", 1)
//定义保存数据的结构体, 默认struct字段名(小写)跟表的字段名一致。 type Place struct { Country string City sql.NullString Telcode int }