关闭

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

标签: sqlNull
70人阅读 评论(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)
0
0
查看评论

golang 字符 数字 bool 类型

package mainimport "fmt"func main(){ fmt.Printf("hello world") fmt.Println("1+1=",1+1) fmt.Println("7.0/3.0=&...
  • writeeee
  • writeeee
  • 2015-11-16 23:29
  • 363

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

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

golang Scan error on column index 7: unsupported driver

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

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

Go语言:解决数据库中null值的问题 本文主要介绍如何使用go语言database/sql库从数据库中读取null值的问题,以及如何向数据库中插入null值。本文在这里使用的是sql.NullString, sql.NullInt64, sql.NullFloat64等结构体,为了方便书写,它...
  • qq_15437667
  • qq_15437667
  • 2017-12-12 12:50
  • 642

处理数据库Null值

处理数据库Null值 数据库表的列可以定义为NULL或NOT NULL。NULL表示列可以存储NULL值;NOT NULL表示列不可以包含NULL值。NULL值表示值是未知的。当在数据库中创建表时,如果没有指定列是NULL还是NOT NULL,数据库默认为NULL。 Java对象类型,比...
  • hennvy
  • hennvy
  • 2015-06-05 21:21
  • 1395

数据库中的NULL值比较

在编程语言中,逻辑表达式的值只有两种:TRUE和FALSE,而在数据库中却并非如此。 今天在'MYSQL技术内幕'一书中发现了相关的知识: “关系数据库中起逻辑表达式作用的并非只有两种,还有一种称为三值逻辑的表达式”,这里的三值逻辑表达式指的就是UNKNOW。当在进行真假状态判断...
  • u013393981
  • u013393981
  • 2014-01-08 10:36
  • 1030

数据库空值和null的区别

所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS关键字, Mysql3.23.0或以后支持用 ...
  • eyeder
  • eyeder
  • 2015-09-01 10:38
  • 8515

java对数据库中NULL的处理

 java中null的概念:java中,null表示类或变量是空,不代表任何对象或实例,可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。数据库中NULL的概念:数据库中,null表示未填写、未知、不可用的概念,和java不同的是数据库中可以将null赋给任何数据类型。这...
  • lubiaopan
  • lubiaopan
  • 2009-11-18 16:46
  • 5379

解决页面上table表格中的null值,

ajax请求成功后返回值有很多空值,而返回的数据key不同,不好做判断,我用了下面的方法,把null值替换掉          var tab=document.getElementById("f"); ...
  • I_am_listen
  • I_am_listen
  • 2016-12-09 13:13
  • 402

数据库中的字段NULL值和''

每次操作数据库,都会遇到NULL和''的拦路虎,由于筛选条件模糊导致查询结果错误。 String str1 = null; str引用为空 String str2 = ""; str引用一个空串 null没有分配内存空间,""分配了空间,...
  • anlidengshiwei
  • anlidengshiwei
  • 2014-12-12 09:47
  • 755
    个人资料
    • 访问:716292次
    • 积分:8982
    • 等级:
    • 排名:第2504名
    • 原创:182篇
    • 转载:125篇
    • 译文:1篇
    • 评论:109条
    博客专栏
    初识Qt

    文章:43篇

    阅读:147867
    文章分类
    最新评论