I am trying to write a procedure that will prepare and exec/query one line:
package postregsql import ( "database/sql" "errors" _ "github.com/lib/pq" ) func Query(database *sql.DB, sql string, args ...interface{}) (*sql.Rows, error) { db_stmt, err := database.Prepare(sql) if err != nil { return nil, errors.New("Ошибка Query(" + sql + ")<DB_Prepare>: " + err.Error()) } defer db_stmt.Close() db_rows, err := db_stmt.Query(args...) if err != nil { return nil, errors.New("Ошибка Query(" + sql + ")<DB_Query>: " + err.Error()) } defer db_rows.Close() return db_rows, nil } func Exec(database *sql.DB, sql string, args ...interface{}) error { db_stmt, err := database.Prepare(sql) if err != nil { return errors.New("Ошибка Exec(" + sql + ")<DB_Prepare>: " + err.Error()) } defer db_stmt.Close() _, err = db_stmt.Exec(args...) if err != nil { return errors.New("Ошибка Exec(" + sql + ")<DB_Exec>: " + err.Error()) } return nil } Exec () for INSERT / UPDATE / CREATE
Query () for SELECT
Exec() does its job perfectly, but with Query() problem - any query with arguments gives empty answers, for example:
name := "1" answer, _ := postregsql.Query(db, "SELECT COUNT(*) FROM table1 WHERE name=$1;", name) count := 0 for answer.Next { answer.Scan(&count) } // count == 0 (по факту больше 1 должно быть) I sin on this line *db_rows, err := db_stmt.Query(args...)* - how to fix it so that it works correctly?