繁体   English   中英

如何在sqlite中插入一个数组?

[英]how to insert an array in sqlite?

我有这样的结构:

type Foo struct {
  bars []string
}

由于 sqlite3 不支持数组数据类型,我们可以将[]string存储为字符串,同时将返回作为字符串切片检索吗? 试图实现如下所示,但由于类型不匹配而出错。 这里需要做什么?

编辑:我已经更改了代码,看起来像在工作

type strArray []string

func (strarr StrArray) Value() (driver.Value, error) {
    if strarr != nil {
        resarr := strings.Join(strarr, "")
        return resarr, nil
    }
    return nil, nil
}

作为database/sql/driver.Valuer补充,您还需要实现database/sql.Scanner以从数据库中读取您的类型。 当您考虑如何实现它时,很明显,在Valuer您应该使用一些分隔符/字符串(当然不会出现在数据中) Join您的切片,以便能够在检索时将其Split回来。

假设这样的分隔符是; (我的疯狂猜测),阅读代码如下所示:

func (a *strArray) Scan(value interface{}) error {
  if value == nil {
    return nil  // case when value from the db was NULL
  }
  s, ok := value.(string)
  if !ok {
    return fmt.Errorf("failed to cast value to string: %v", value)
  }
  *a = strings.Split(s, ";")
  return nil
}

对于写作,你需要使用strings.Join(strarr, ";")Valuer执行。

其他不太重要的实现需要对切片进行编组并将结果字节编码为字符串(base32/64?json?)。 在任何情况下,在将它们保存到数据库时,您都不需要丢失不同切片元素的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM