golang解决数据库中null值的问题

标签: sqlNull
286人阅读 评论(0) 收藏 举报
分类:

转自: http://blog.csdn.net/qq_15437667/article/details/78780945

要点

从数据库读取可能为null值得值时,可以选择使用sql.NULL***来读取;或者使用IFNULL、COALESCE等命令让数据库查询值返回不为”“或者NULL
若需要往数据库中插入null值,则依然可以使用sql.NULL***存储所需的值,然后进行插入NULL值
直接使用sql.NULL***类型容易出现valid遗漏设置等问题,普通int、string与其转换时,请写几个简单的get、set函数

从数据库中读取NULL值

Scan NULL值到string的报错
sql: Scan error on column index 1: unsupported Scan, storing driver.Value type into type *string
Scan NULL值到int的报错
sql: Scan error on column index 1: converting driver.Value type (“”) to a int: invalid syntax

使用sqlNull***,
源码定义如下, (不需要自已定义, import “database/sql”)

type NullInt64 struct {
    Int64 int64
    Valid bool // Valid is true if Int64 is not NULL
}
func (n *NullInt64) Scan(value interface{}) error
func (n NullInt64) Value() (driver.Value, error)

type NullString struct {
    String string
    Valid  bool // Valid is true if String is not NULL
}
func (ns *NullString) Scan(value interface{}) error
func (ns NullString) Value() (driver.Value, error)

实现如下:

type Person struct {
    firstName               string
    lastNullName            sql.NullString
    nullAge                 sql.NullInt64
}

rowNull := db.QueryRow("SELECT first_name, last_name FROM person WHERE first_name='yousa'")
err = rowNull.Scan(&hello.firstName, &hello.lastNullName)
if err != nil {
    fmt.Println(err)
}
fmt.Println(hello)

rowNull1 := db.QueryRow("SELECT first_name, age FROM person WHERE first_name='yousa'")
err = rowNull1.Scan(&hello.firstName, &hello.nullAge)
if err != nil {
    fmt.Println(err)
}
fmt.Println(hello)
查看评论

golang Scan error on column index 7: unsupported driver

这个报错挺烦人的,其实可以避免 出现这个问题的原因在于,数据库字段信息有null值 比如建表的时候有字段使用了default null,那么对该条数据填充内容的时候,如果此字段没有值,为空,那么读取表...
  • u012210379
  • u012210379
  • 2015-04-05 10:03:48
  • 2047

Go语言:解决数据库中null值的问题

Go语言:解决数据库中null值的问题 本文主要介绍如何使用go语言database/sql库从数据库中读取null值的问题,以及如何向数据库中插入null值。本文在这里使用的是sql.NullS...
  • qq_15437667
  • qq_15437667
  • 2017-12-12 12:50:38
  • 1305

关于Golang中database/sql包的学习笔记

https://segmentfault.com/a/1190000003036452 因为最近在学习Go,所以找了revel这个框架来学习,感觉和php的面向对象有很大不同。revel...
  • liukuan73
  • liukuan73
  • 2016-07-11 09:04:35
  • 2675

golang读取mysql中null字段出错问题

今天mysql中null值折腾了一番,golang中在转换mysql是对null出错,导致读取数据失败, 最后搜到了一个mysql使用函数COALESCE,解决了此问题,但是最好同时也将数据库中默认值...
  • wwwjyl_jarbinn
  • wwwjyl_jarbinn
  • 2016-12-24 15:08:15
  • 544

Qt数据库SQL语句绑定方式与插入空值

Approaches to Binding Values Below we present the same example using each of the four different bind...
  • u014066037
  • u014066037
  • 2017-01-19 16:03:39
  • 764

go语言scan空值报错

http://xmarker.blog.163.com/blog/static/22648405720144743531420/ 今天使用go语言时,如果数据库里有空值,扫描出来报错,其中环...
  • leonpengweicn
  • leonpengweicn
  • 2016-04-19 17:41:13
  • 1828

golang:闲谈数据库操作

golang的数据库操作
  • u010599018
  • u010599018
  • 2016-12-22 16:53:02
  • 1266

golang json解析出现值为空

我是通过beego框架,将请求过来的json进行解析,并将值保存在结构体中 --------------------1---------------------------------- ...
  • markcheney
  • markcheney
  • 2017-07-21 22:48:08
  • 614

Golang数据库操作

Golang对于数据库操作的基本支持
  • CoProphet
  • CoProphet
  • 2015-01-02 17:04:41
  • 3754

JAVA与SQL 中的null与NULL

前言:null与NULL都不是表示空值吗,有什么值得深入讨论的的?首先你在编写Java代码时使用过NULL吗?大概用IDE用习惯了,自动给生成以及纠正没有注意过也很正常。同样道理在数据库中的疑问我就不...
  • fanxiaobin577328725
  • fanxiaobin577328725
  • 2016-10-14 22:55:54
  • 1643
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 74万+
    积分: 9218
    排名: 2870
    博客专栏
    文章分类
    最新评论