【问题标题】:(GoLANG) *sql.DB Scan rows into string array pointer(GoLANG) *sql.DB 将行扫描成字符串数组指针
【发布时间】:2020-03-20 06:46:13
【问题描述】:

我对通过 GO 处理 sql 数据库还很陌生。我有一个实例,我正在将数据库连接中的行扫描到实例化切片中嵌套结构的切片中。但似乎无法正确执行它。是否有一些循环技术或参考可以在 Golang 中使用。我已经提供了示例代码,并且可以提供任何其他内容。连接池已建立,只有当我去扫描行时,我的程序才会出现问题。所以我的问题是,如果我想将多行(4 行和 2 列)插入到(老虎和狮子)对象(列)中,我将如何循环并使用 rows .扫描??

rows, err := db.Query(`Query`)

if err != nil {
		//error
		return 
	} else {
		// logging
	}
}

for rows.Next() {
		ref := &structurre{}

		err := rows.Scan(&ref.number, &ref.animal[0].tiger, &ref.animal[o].lion)
		if err != nil {
			logEntry.Info(err)
			return details, err

		}
		details = append(details, ref)
}
  
type structure struct {
 number string
 animal []*zoo
}

type zoo struct {
  tiger string
  lion string
}

【问题讨论】:

  • 您要扫描zoos 的行还是structures 的行?
  • @mkopriva 动物园的行
  • 然后在每次迭代中初始化一个新的zoo 实例,将列扫描到其字段中,最后将该实例附加到在循环外声明的zoos 切片。
  • 你能布置一些形式的例子吗@mkopriva

标签: go


【解决方案1】:

也许你正在寻找这样的东西:

    type zoo struct {
    tiger string
    lion  string
}

type structure struct {
    number string
    animal []*zoo
}

var ref []structure

rows, err := db.QueryContext(ctx, `query`, `args...`)

if err != nil {
    //error
    return err
}
// logging

for rows.Next() {
    var scans structure
    err = rows.Scan(&scans.number, &scans.animal[0].tiger, &scans.animal[0].lion)
    if err != nil {
        fmt.Println(err)
        if err == sql.ErrNoRows {
            fmt.Println("No Rows found")
        }
        return err

    }
    ref = append(ref, scans)
}

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多