golangは、列にNULL値が、その後、失敗するフィールドの背中を抽出し、データベースを照会する際に遭遇、このような状況には2つの解決策があるかもしれません:
1.制限データベースが空いていないか、既定値に、またはにデータが空白のを発見されないように、選択クエリNULL値は、処理されたときに
使用して処理2. sql.nullstring
次の例では、プロセスをsql.sqlstringされています。
パッケージメイン
インポート(
_ " github.com/go-sql-driver/mysql "
" FMT "
" データベース/ SQL "
)
FUNCのnulldel(){
VARのERRエラーが
接続: = " dmladmin:dmladminする@ TCP(192.168.1.113:3306 )/ DB_ADMIN "
デシベル、ERR: = sql.Open(" mysqlの" 接続する)
場合!誤る= nilの{
fmt.Println(" 、MySQLが失敗した接続アドレス= " + 接続し、)ERR
} 他{
sqlContent: = '選択
t.statedate、
t.table_schema、
t.table_name、
t1.table_comment、
t.table_rows、
t.lm_table_rows、
ケース場合t.lm_table_rows > 0、次いで
ラウンド((t.table_rows - t.lm_table_rows)* 100 / t.lm_table_rows、2 )
そうでなければ0端growth_rate、
t.gather_interval
からT tb_table_grouth_stat INFORMATION_SCHEMA.TABLES t1に参加左
t.table_schemaに = t1.table_schema
と t.table_name = t1.table_name
t.table_schema ない で(' DB_ADMIN ')と statedate =(MAX(statedate)を選択からtb_table_grouth_stat)
ORDER BY 7 DESC限界10 '
行、ERR: = db.Query(sqlContent)
なら!ERR = ゼロ{
fmt.Println(ERR)
}他{
用rows.Next(){
statedate: = sql.NullString {文字列:"" 、有効:偽}
TABLE_SCHEMA: = sql.NullString {文字列:"" 、有効:偽}
TABLE_NAME。 = sql.NullString {文字列:"" 、有効:偽}
table_comment: = sql.NullString {文字列:"" 、有効:偽}
TABLE_ROWS: = sql.NullString {文字列:"" 、有効:偽}
lm_table_rows: = sql.NullString {文字列:""、有効:}偽
growth_rate: = sql.NullString {文字列:"" 、有効:偽}
gather_interval: = sql.NullString {文字列:"" 、有効:偽}
(rows.Scan&statedate、&TABLE_SCHEMA、およびTABLE_NAME、&table_comment、&TABLE_ROWS、&lm_table_rows、&growth_rate、 &gather_interval)
であれば!table_comment.Valid {
table_comment.String = " 未知"
}
fmt.Println(statedate、TABLE_SCHEMA、TABLE_NAME、table_comment、TABLE_ROWS、lm_table_rows、growth_rate、gather_interval)
fmt.Println(statedate.String、table_schema.String、table_name.String、table_comment.String、table_rows.String、lm_table_rows.String、growth_rate.String、gather_interval.String)
}
}
}
}
メインFUNC(){
nulldel()
}