golangはデータベースのnull値を解決します.
3704 ワード
回転:http://blog.csdn.net/qq_1537667/articale/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*string Scan NULL値からintのエラーsql:Scan column index 1:converting drive.Vlitype
sqlNull**を使って、ソースの定義は以下の通りです.
要点
データベースから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*string Scan NULL値からintのエラーsql:Scan column index 1:converting drive.Vlitype
sqlNull**を使って、ソースの定義は以下の通りです.
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)