1 回答
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)
}
- 1 回答
- 0 关注
- 290 浏览
添加回答
举报