mysql - 已建立连接时插入数据库的问题
问题描述
我正在尝试使用此代码将某些内容插入 MySQL 数据库。当我运行调试器时,我看到它停在这一行:
stmt, err := users_db.Client.Prepare(queryInsertUser)
我的调试器将我带到这一行,db 的值为 nil。请注意,这些行不是我的,应该是内部 Go 模块等。我的数据库连接也已经建立,正如我在控制台中看到的那样。
// conn returns a newly-opened or cached *driverConn.
func (db *DB) conn(ctx context.Context, strategy connReuseStrategy) (*driverConn, error) {
db.mu.Lock()
if db.closed {
db.mu.Unlock()
return nil, errDBClosed
}
和
func (user *User) Save() *errors.RestError {
stmt, err := users_db.Client.Prepare(queryInsertUser)
if err != nil {
return errors.NewInternalServerError(err.Error())
}
defer stmt.Close()
insertResult, err := stmt.Exec(user.FirstName, user.LastName, user.Email, user.DateCreated)
// not so important part removed
return nil
}
和我的 users_db 包中的代码
package users_db
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"log"
)
var (
Client *sql.DB
username = "bla bla"
password = "bla bla"
host = "bla bla"
schema = "bla bla"
)
func init() {
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8",
username, password, host, schema,
)
var err error
Client, err := sql.Open("mysql", dataSourceName)
if err != nil {
panic(err)
}
if err = Client.Ping(); err != nil {
panic(err)
}
log.Println("database successfully configured")
}
此错误的原因可能是什么?如何解决?
解决方案
正如@mkopriva 评论的那样,您在init 中再次声明了Client。您可以通过以下方式解决它:
c, err := sql.Open("mysql", dataSourceName)
Client = c
推荐阅读
- adonis.js - 不能同时使用连接 URL 和选项对象
- azure - Azure 路易斯迁移问题
- go - go - 如何在go golang中的特定内存地址声明一个指针并在那里存储一个值
- javascript - 如何在不使用 DOM 函数的情况下将 Uint8ClampedArray 转换为图像?
- django - Django嵌套if语句给了我一个奇怪的错误
- java - 如何在单个语句中运行多个查询
- ng-bootstrap - 从 ngbDropdownToggle 中删除小箭头
- javascript - 将报价添加到没有报价的 json 文件
- java - 独立罐空手道问题
- python - 无法确定为什么 MNE raw.plot 返回“ValueError:bottom cannot be >= top”