database/sql包

初始化

database/sqldatabase/sqldatabase/sqlsql.Open()db.Ping()sql.DBOpen()Close()sql.DB

连接池配置

db.SetMaxOpenConns(n int)too many connectionsdb.SetMaxIdleConns(n int)MaxIdleConnsMaxOpenConnsdb.SetConnMaxLifetime(t time.Duration)db.SetConnMaxIdleTime(t time.Duration)MySQLwait_timeoutwait_timeoutsql.DB

在这里插入图片描述

操作

db.Prepare?$N:paramdb.Exec()db.Query()INSERT, UPDATE, DELETEQuerysql.Rowssql.Rowsrows.Next()io.EOFrows.Closefor rows.Next(){}rows.Next()net.Connrows.Close()rows.Close()rows.ScanVARCHAR"1"strconv.ParseInt()strconv.ParseInt()rows.ScanColumns()Scan()rows.Columnssql.RawBytes
cols, err := rows.Columns()
if err != nil{
    panic(err)
}

vals := make([][]byte, len(cols))
scans := make([]interface{}, len(cols))
for i := range vals{
    scans[i] = &vals[i]
}

var results []map[string]string
for rows.Next(){
    err = rows.Scan(scans...)
    if err != nil{
        panic(err)
    }

    row := make(map[string]string)
    for k, v := range vals{
        key := cols[k]
        row[key] = string(v)
    }
    results = append(results, row)
}

事务

txtxdbstmt

错误处理

database/sqlmaxBadConnRetriesrows.Scanrows.Err()Nextdb.QueryRow()sql.ErrNoRowsQueryRow()

原理

  • 接口定义
    在这里插入图片描述
  • 调用关系
    在这里插入图片描述
GORM
TableName() stringgorm:"column:"IDgorm:"primary_key"*DB