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同理,略。

  • 相关阅读:
    long类型和int类型的区别!!!!!
    Java-冒号的作用
    Java Scanner类
    jre安装过程
    76. 最小覆盖子串
    75. 颜色分类
    73. 矩阵置零
    72. 编辑距离
    71. 简化路径
    61. 旋转链表
  • 原文地址:https://www.cnblogs.com/koushr/p/14145536.html
Copyright © 2011-2022 走看看