使用上下文方式执行

Db, Conn, Stmt, Tx等类型的查询函数,执行非查询语句函数,语句准备函数以及DB.Ping等函数都有相应的使用提供的上下文执行的版本。以下为使用DB.QueryContext, DB.ExecContext函数示例。

func rwWithContext(db *sql.DB){
        var err    error
        var rows * sql.Rows
        var val1   int = 10
        var val2   string = "hello!"
        ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second)
        defer cancel()
        result, err := db.ExecContext(ctx, "insert into testcase1(col1, col2) values(:1, :2)",
                                          val1, val2)
        getError(err)
        rowsAffected, err := result.RowsAffected()
        getError(err)
        fmt.Println(rowsAffected)
        ctx, cancel = context.WithTimeout(context.Background(), 55*time.Second)
        defer cancel()
        rows, err = db.QueryContext(ctx, "select col2 from testcase1 where col1 = :val",val1)
        getError(err)
        defer rows.Close()
        for rows.Next() {
                var str2 string
                rows.Scan(&str2)
                fmt.Println(str2)
        }
}