ZBLOG

go 封装一个通用查询

好的,下面是一个封装了通用查询功能的Go代码示例:

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

type DBQuery struct {
	db *sql.DB
}

func NewDBQuery() (*DBQuery, error) {
	db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/database")
	if err != nil {
		return nil, err
	}
	return &DBQuery{db: db}, nil
}

func (q *DBQuery) Close() error {
	return q.db.Close()
}

func (q *DBQuery) Query(sql string, args ...interface{}) ([]map[string]interface{}, error) {
	rows, err := q.db.Query(sql, args...)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	columns, _ := rows.Columns()
	count := len(columns)
	values := make([]interface{}, count)
	valuePtrs := make([]interface{}, count)
	result := []map[string]interface{}{}

	for rows.Next() {
		for i := 0; i < count; i++ {
			valuePtrs[i] = &values[i]
		}
		rows.Scan(valuePtrs...)

		rowData := map[string]interface{}{}
		for i, colName := range columns {
			val := values[i]

			b, ok := val.([]byte)
			if ok {
				rowData[colName] = string(b)
			} else {
				rowData[colName] = val
			}
		}
		
        result = append(result, rowData)
    }
    
    return result, nil
}

func main() {
	dbq, err := NewDBQuery()
	if err != nil {
	  fmt.Println("Failed to connect to database:", err)
	  return
	}
	defer dbq.Close()

	sql := "SELECT * FROM users WHERE age > ?"
	args := []interface{}{18}

	rows, err := dbq.Query(sql, args...)
	if err != nil {
	  fmt.Println("Failed to execute query:", err)
	  return
	}
	
	for _, row := range rows {
		fmt.Println(row)
	}
}

以上示例代码封装了一个通用查询功能,通过使用 sql.Open 函数连接到数据库(这里以MySQL为例),并提供了一个 Query 方法用于执行SQL查询语句,并返回结果集。你可以根据自己的需要修改和扩展此代码。请确保安装了对应的数据库驱动库,这里使用的是 github.com/go-sql-driver/mysql


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8103

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?