语句准备

  • 1) 使用db类型
func prepareStatement1(db * sql.DB){
        var err       error
        var stmt    * sql.Stmt
        var rows    * sql.Rows
        var val1      int      = 10
        var querySQL  string   = "select col2 from testcase1 where col1 = :1"
        //准备查询语句
        stmt, err = db.Prepare(querySQL)
        getError(err)
        defer stmt.Close()
        rows, err = stmt.Query(val1)
        getError(err)
        for rows.Next() {
                var val2 string
                rows.Scan(&val2)
                fmt.Println(val2)
        }
}
  • 2) 使用conn类型
func prepareStatement2(db * sql.DB){
        var err       error
        var stmt    * sql.Stmt
        var rows    * sql.Rows
        var conn    * sql.Conn
        var val1      int      = 10
        var querySQL  string   = "select col2 from testcase1 where col1 = :1"
        ctx, cancel := context.WithTimeout(context.Background(), 55*time.Second)
        defer cancel()
        //从连接池中返回一个连接
        conn, err    = db.Conn(ctx)
        getError(err)
        //将连接返回到连接池中
        defer conn.Close()
        //准备语句
        stmt, err = conn.PrepareContext(ctx, querySQL)
        getError(err)
        defer stmt.Close()
        //给定参数查询
        rows, err = stmt.Query(val1)
        getError(err)
        defer rows.Close()
        for rows.Next() {
                var val2 string
                rows.Scan(&val2)
                fmt.Println(val2)
        }
}
  • 3) 使用Tx类型
func prepareStatement3(db * sql.DB){
        var err       error
        var stmt    * sql.Stmt
        var result    sql.Result
        var tx      * sql.Tx
        var val1      int      = 10
        var val2      string   = "hello"
        var insertSQL string   = "insert into testcase1(col1, col2) values(:1, :2)"
        //从连接池中开启一个事务
        tx, err    = db.Begin()
        getError(err)
        //准备语句
        stmt, err = tx.Prepare(insertSQL)
        getError(err)
        defer stmt.Close()
        //给定参数查询
        result, err = stmt.Exec(val1, val2)
        if err != nil{
                if rollbackErr := tx.Rollback(); rollbackErr != nil {
                        log.Fatalf("unable to rollback: %b", rollbackErr)
                }
                log.Fatalln(err)
                return
        }
        rowsAffected, err := result.RowsAffected()
        getError(err)
        fmt.Println(rowsAffected)
        if err = tx.Commit(); err != nil {
                log.Fatalln(err)
        }
}