1 type Result interface {
2 LastInsertId() (int64, error)
3 RowsAffected() (int64, error)
4 }
1 // 一把锁
2 // 一个结果集的假接口实现,表示需要的功能,让他人来具体实现。假装实现了某个接口,其实是调用了内部接口的对应方法
3 type driverResult struct {
4 sync.Locker
5 resi driver.Result
6 }
7 // Result 是对已执行 SQL 命令的总结,。
8 // LastInsertId() 会返回一个由数据库生成的整数, 这个整数是对命令的响应。 在插入一个新的数据行时, 这个整数通常来源于数据表中的自增数据列。
9 // 并不是所有数据库都支持这个特性, 并且各个数据库在实现这个特性时使用的语句也会有所不同。
10 // RowsAffected() 返回受到更新、插入或者删除操作影响的行数量, 并不是所有数据库或者所有数据库驱动都支持这个特性。
11 type Result interface {
12 LastInsertId() (int64, error)
13 RowsAffected() (int64, error)
14 }
15
16 func (dr driverResult) LastInsertId() (int64, error) {
17 dr.Lock()
18 defer dr.Unlock()
19 return dr.resi.LastInsertId()
20 }
21
22 func (dr driverResult) RowsAffected() (int64, error) {
23 dr.Lock()
24 defer dr.Unlock()
25 return dr.resi.RowsAffected()
26 }