如何在sqlx中执行无参数纯SQL语句 解决sqlx.Exec不存在报错
sqlx调用Exec方法报错解决方案
报错根因
sqlx包本身未提供包级别的Exec/Query执行方法,这类SQL执行方法仅绑定在已初始化的*sqlx.DB数据库连接实例、*sqlx.Tx事务实例上,直接调用sqlx.Exec会触发方法不存在的报错。
正确操作流程
- 首先初始化数据库连接,获取
*sqlx.DB实例
// 引入依赖 import ( "github.com/jmoiron/sqlx" _ "github.com/go-sql-driver/mysql" // 替换为对应数据库的驱动 ) func initDB() (*sqlx.DB, error) { // 第一个参数为数据库驱动名,第二个为数据库连接DSN db, err := sqlx.Connect("mysql", "root:123456@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4") if err != nil { return nil, err } return db, nil }
- 调用实例的
Exec方法执行无参数SQL
func main() { db, err := initDB() if err != nil { panic(err) } defer db.Close() // 执行无参数纯SQL,比如建表、删表等操作 _, err = db.Exec(`CREATE TABLE IF NOT EXISTS student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(32) NOT NULL, age INT NOT NULL DEFAULT 0 )`) if err != nil { panic(err) } }
- 无参数查询场景可调用
Query/Select方法
type Student struct { Id int `db:"id"` Name string `db:"name"` Age int `db:"age"` } // 查询所有学生 var students []Student err = db.Select(&students, "SELECT * FROM student") if err != nil { panic(err) }
注意:如果你在事务中执行SQL,调用
*sqlx.Tx实例的Exec方法即可,用法和*sqlx.DB完全一致。
内容的提问来源于stack exchange,提问作者ccd
相关产品推荐
相关产品推荐

