猿问

MySQL 插入 Float32 和 Float64 Go

我正在尝试在 MySQL 表中插入一行:


package main


import (

    "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 实例的同一台服务器上运行它,我可以从终端使用用户/密码访问数据库。


有什么帮助吗?


陪伴而非守候
浏览 291回答 1
1回答

holdtom

您的数据库中的 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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答