zoukankan      html  css  js  c++  java
  • go如何往数据库中插入null

    利用gorm

    gorm执行原生sql,如果是查询的话,用Raw(),否则用Exec()。

    插入数据:

    初始化一个指向gorm.DB实例的指针后,调用此指针的Exec()方法

    // Exec execute raw sql
    func (db *DB) Exec(sql string, values ...interface{}) (tx *DB) {
        tx = db.getInstance()
        tx.Statement.SQL = strings.Builder{}
    
        if strings.Contains(sql, "@") {
            clause.NamedExpr{SQL: sql, Vars: values}.Build(tx.Statement)
        } else {
            clause.Expr{SQL: sql, Vars: values}.Build(tx.Statement)
        }
    
        tx.callbacks.Raw().Execute(tx)
        return
    }

    id := 1

    name := "张三"

    age := 18

    city := ""

    数据库中,city字段值不想存空字符串,想存null,如何搞?可以利用go自带的sql包中的NullString类型。

    自定义一个函数,用于根据string生成NullString。实际上,go本应该自带这个方法的,无奈go基础包并不完善。

    func NewNullString(s string) sql.NullString {
        if len(s) == 0 {
            return sql.NullString{}
        }
        return sql.NullString{
            String: s,
            Valid:  true,
        }
    }

    然后Exec方法中,

    db.Exec("insert into t_a (id, name, age, city) values (?, ?, ?, ?)", id, name, age, NewNullString(city))

    详细代码是:

    if err := dao.DB.Exec("insert into t_a (id, name, age, city) values (?, ?, ?, ?)", id, name, age, NewNullString(city)).Error; err != nil {
        log.Logger.Panic("插入t_a失败", err)
    }

    利用原生的database/sql包和利用gorm同理,略。

  • 相关阅读:
    菜鸟学存储:网络存储IP SAN与IB SAN
    读xml高手
    预先加载图片
    xred520
    最简单准确的硬盘整数分区设置操作方法
    Google 每天处理约 20000TB 的数据
    IE 8 无法正常使用网站后台编辑器问题
    常用的JS技术1
    adodb stream 使用说明
    [Tools] JDGUI(Java Decompiler)
  • 原文地址:https://www.cnblogs.com/koushr/p/14145536.html
Copyright © 2011-2022 走看看