golang mysql nil_golang 数据库 空字段 问题-Go语言中文社区

代码:

package main

import (

_ "github.com/go-sql-driver/mysql"

"fmt"

"database/sql"

)

func main() {

d13()

fmt.Println("--------------------------")

d14()

}

func d13(){

var err error

connect := "f:f@tcp(192.168.1.0:3306)/lr1"

db, err := sql.Open("mysql", connect)

if err != nil{

fmt.Println("connect mysql failed, address = " + connect, err)

} else{

sqlContent := "select real_nm, sex, birth, ext from member where tenant=? and mem_id=?"

rows, err := db.Query(sqlContent, "ST", "2017")

if err != nil{

fmt.Println(err)

} else{

for rows.Next() {

var nm string

var sex string

var birth string

var ext string

err := rows.Scan(&nm, &sex,&birth, &ext) // birth字段在数据库中是空字段

if err != nil{

fmt.Println("d11 error. ", err)

}

fmt.Println(nm)

fmt.Println(sex)

fmt.Println(birth)

fmt.Println(ext)

}

}

}

}

func d14(){

var err error

connect := "f:f@tcp(192.168.1.0:3306)/lr1"

db, err := sql.Open("mysql", connect)

if err != nil{

fmt.Println("connect mysql failed, address = " + connect, err)

} else{

sqlContent := "select real_nm, sex, birth, ext from member where tenant=? and mem_id=?"

rows, err := db.Query(sqlContent, "ST", "2017")

if err != nil{

fmt.Println(err)

} else{

for rows.Next() {

nm := sql.NullString{String:"", Valid:false}

sex := sql.NullString{String:"", Valid:false}

birth := sql.NullString{String:"", Valid:false}

ext := sql.NullString{String:"", Valid:false}

err := rows.Scan(&nm, &sex,&birth, &ext) // birth字段在数据库中是空字段

if err != nil{

fmt.Println("d12 error. ", err)

}

fmt.Println(nm.String)

fmt.Println(sex.String)

fmt.Println(birth.String)

fmt.Println(ext.String)

}

}

}

}

数据库查询截图:

f2dc67b7a25474fba1bf6c1a3ca5c43b.png

运行结果截图:

7f3a89f909ed02007bff307ac0e99d1b.png

因为数据库的birth字段为空,所以它在给golang的string对象birth赋值时,出错了(golang的 string不能等于nil)所以后续的数据库的ext就没有再赋值给golang的ext对象了, 而是返回error对象

参考路径:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值