在Java中,可以通过PreparedStatement和executeBatch()方法来实现批量执行多条SQL语句。但是我们如何使用Go的database/sql包来完成同样的事情呢?
database/sql包提供了一个可以执行SQL语句的Exec函数。但是,它只需要一组参数。要批处理多个语句,我们可以使用可变参数函数并构造一个 SQL 语句,其中包含要执行的所有单独语句。
下面是一个示例:
func bulkInsert(unsavedRows []*ExampleRowStruct) error { var ( valueStrings []string valueArgs []interface{} ) for _, post := range unsavedRows { valueStrings = append(valueStrings, "(?, ?, ?)") valueArgs = append(valueArgs, post.Column1) valueArgs = append(valueArgs, post.Column2) valueArgs = append(valueArgs, post.Column3) } stmt := fmt.Sprintf( "INSERT INTO my_sample_table (column1, column2, column3) VALUES %s", strings.Join(valueStrings, ","), ) _, err := db.Exec(stmt, valueArgs...) return err }
此代码构造了一个将所有行插入数据库的单个 SQL 语句。通过将各个语句参数(值)作为可变参数传递,我们可以在单个网络往返中执行多个语句。测试表明,这种方法比使用 Begin、Prepare 和 Commit 方法批处理 SQL 语句要快得多。
以上是如何使用Go的database/sql包高效地批量执行SQL语句?的详细内容。更多信息请关注PHP中文网其他相关文章!