发布时间:2024-12-22 22:02:52
在这段代码中,我们使用了MySQL驱动,连接到了本地的3306端口,并指定了数据库名称为mydb。注意,我们还需要在导入包的时候引入mysql的驱动。
1. Exec方法用于执行不返回结果集的操作,例如插入、更新和删除等。下面是一个示例:
```go result, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "test", 18) if err != nil { panic(err) } affected, _ := result.RowsAffected() fmt.Println("插入影响的行数:", affected) ```2. Query方法用于执行返回结果集的操作,例如查询。下面是一个示例:
```go rows, err := db.Query("SELECT name, age FROM users WHERE id = ?", 1) if err != nil { panic(err) } defer rows.Close() for rows.Next() { var name string var age int err = rows.Scan(&name, &age) if err != nil { panic(err) } fmt.Println(name, age) } ```3. QueryRow方法用于执行返回单行结果的操作,例如查询单个记录。下面是一个示例:
```go var name string var age int err := db.QueryRow("SELECT name, age FROM users WHERE id = ?", 1).Scan(&name, &age) if err != nil { panic(err) } fmt.Println(name, age) ```例如,下面的示例展示了如何使用事务处理来确保一系列的插入操作要么全部成功,要么全部失败:
```go tx, err := db.Begin() if err != nil { panic(err) } defer tx.Rollback() stmt, err := tx.Prepare("INSERT INTO users (name, age) VALUES (?, ?)") if err != nil { panic(err) } defer stmt.Close() for i := 0; i < 10; i++ { _, err := stmt.Exec("test" + strconv.Itoa(i), i+10) if err != nil { panic(err) } } err = tx.Commit() if err != nil { panic(err) } ```在这段代码中,我们首先调用db.Begin()方法开启了一个事务,然后通过tx.Prepare()方法准备SQL语句的执行计划,并在循环中通过stmt.Exec()方法执行插入操作。最后,调用tx.Commit()方法提交事务。如果出现任何错误,我们将调用tx.Rollback()方法回滚事务。
例如,通过设置MaxIdleConns和MaxOpenConns属性,我们可以控制连接池中空闲连接和打开连接的最大数量。下面是一个示例:
```go db.SetMaxIdleConns(10) db.SetMaxOpenConns(100) ```在这段代码中,我们将连接池的最大空闲连接数设置为10,最大打开连接数设置为100。