VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

读取结果

获取单一结果

若希望获取单一结果,则进行查询的接口有所不同,并通过连接对象的Scan方法获取结果值,Scan是通过参数来返回结果值的,参数是指针类型。

示例

var date string
Err = db.QueryRow(“select current_date”).Scan(&date)
if err != nil {
  Log.Fatal(err)
}

使用数组获取结果

驱动程序获取某个查询的结果集,客户端可通过数组来存储数据,同样是通过Scan来获取,一次获取一条数据。

示例

用于一条记录结果的结构:

type product struct {
ProductNo string
Name string
Price float64
}

逐条获取数据并存入数组:

rows, err := db.Query(`Select * from products`)
	if err != nil {
		fmt.Println("Some amazing wrong happens in the process of Query.", err)
		return err, []product{}
	}
	products := make([]product, 0)
	defer rows.Close() //关闭连接
	index := 0
	var p product
	for rows.Next() {
		err := rows.Scan(&p.ProductNo, &p.Name, &p.Price)
		products = append(products, p)
		if err != nil { // 获得的都是字符串
			fmt.Println("Some amazing wrong happens in the process of queryAll.", err)
			return err, products
		}
		index++
	}

使用注意事项:在获取到rows结果集后,建立及时声明 defer rows.Close() ,避免忘记释放空间导致后续空间紧张。

支持PBE

本驱动支持vastbase的缓存计划以及参数绑定,其中缓存计划以及后期的绑定参数执行接口分别为:prepare,Query。

缓存计划示例

sqlStr := "Select * from products where name=$1"
	stmt, err := db.Prepare(sqlStr)
	if err != nil {
		fmt.Printf("prepare failed, err:%v\n", err)
		return err, []product{}
	}
	defer stmt.Close()

此时返回的是一个stmt对象,并非结果,该对象必须绑定参数才能执行出结果。

传入参数执行计划示例:

rows, err := stmt.Query(pname)
	if err != nil {
		fmt.Printf("query failed, err:%v\n", err)
		return err, []product{}
	}
	defer rows.Close()

调用stmt对象的Query方法并传入参数,得到最终结果,此执行计划可以多次复用,传入不同参数即可。