亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL 插入 Float32 和 Float64 Go

MySQL 插入 Float32 和 Float64 Go

Go
陪伴而非守候 2021-11-22 16:54:22
我正在嘗試在 MySQL 表中插入一行:package mainimport (    "strconv"    "io/ioutil"    "strings"    "os/exec"    "database/sql"    _ "github.com/go-sql-driver/mysql")func main() {    temp_cpu := getCPUTemp() // returns float32    temp_gpu := getGPUTemp() // returns float64    db, err := sql.Open("mysql", "user:pass@/sysStats")    handleError(err)    _, err = db.Query("INSERT INTO temperatures (id, cpu, gpu, timestamp) VALUES (?, ?, ?, ?)", 1, temp_gpu, temp_cpu, time.Now())    handleError(err)    db.Close()    return}它成功構建,但是當我運行生成的二進制文件時,它會在很長時間后超時并出現通用超時錯誤。該表具有以下架構:+----------------+-----------+------+-----+---------+-------+| Field          | Type      | Null | Key | Default | Extra |+----------------+-----------+------+-----+---------+-------+| idtemperatures | int(11)   | NO   | PRI | NULL    |       || cpu            | float     | YES  |     | NULL    |       || gpu            | float     | YES  |     | NULL    |       || timestamp      | timestamp | YES  |     | NULL    |       |+----------------+-----------+------+-----+---------+-------+我在托管 MySQL 實例的同一臺服務器上運行它,我可以從終端使用用戶/密碼訪問數據庫。有什么幫助嗎?
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

您的數據庫中的 id / 主鍵字段被調用"idtemperatures"并"id"在您的 SQL 語句中使用。


此外,由于您不是在執行查詢(而是INSERT),因此您應該使用DB.Exec()方法來執行它。您永遠不應該使用DB.Query() 來執行 DML(數據操作語言)語句。


如果您無法連接到您的數據庫,您可能會收到超時錯誤。確保它使用默認協議 (TCP) 和主機 (localhost:3306)。另一個原因可能是因為您曾經DB.Query()執行過 SQLINSERT語句,并DB.Query()返回一個*sql.Rows保存數據庫連接的值,直到您使用該Rows.Close()方法關閉它——而您從未這樣做過;你甚至沒有存儲返回的db.Rows值。


此外,您應該db.Close()在打開它后進行錯誤檢查后立即調用作為延遲語句。


更正的例子:


db, err := sql.Open("mysql", "user:pass@/sysStats")

if err != nil {

    fmt.Println("Failed to open DB:", err)

    return

}

defer db.Close()


s := "INSERT INTO temperatures (idtemperatures, cpu, gpu, timestamp) VALUES (?, ?, ?, ?)"

res, err = db.Exec(s, 1, temp_gpu, temp_cpu, time.Now())


if err != nil {

    fmt.Println("Failed to execute INSERT:", err)

} else {

    n, err := res.RowsAffected()

    fmt.Println("INSERT executed, rows affected: ", n, err)

}


查看完整回答
反對 回復 2021-11-22
  • 1 回答
  • 0 關注
  • 334 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號