06:Go数据库查询

承上文,本次做的工作包括:

1、连接数据库

2、执行SQL(查询)

3、获取返回值,并且放入Record

4、Record具备dataMap和getStr(col string)等数据和方法

5、可以获取若干的参数(目前只接收string类型)

先谈一下感受,因为是从Java移植过来,有几个地方还是很不同的,一是没有JDBC,有一个database/sql的包比较类似。二是Go不是完全面向对象语言,不像之前强调类、属性、行为这样的一个固有结构。第三,搞了有一会儿了,因为基础不熟,就是Go中默认的list,和Java的ArrayList等完全不同,无法直接相互替代(也许有办法替代,只是我不知道)。

直接放示例代码(完整代码整理后上传)。

1、连接数据库

这个一搜一大把,说不说也无妨,目前还没有和配置文件分离。

2、执行SQL(查询)

作为客户端,那么需求就应该是这样的:

rows, e := DB.Query("select * from user where id in (?,?,?)","1","2","3")

这里Query的代码(不是完整代码,不包括接收多个参数):

func Query(sql string, para ...string) ArrayList{
	var dataList ArrayList
	//获取参数值
	for i := 0; i < len(para); i++ {

	}
	rows, err := DB.Query(sql)
	if err == nil {
		//errors.New("query incur error")
	}
	columns, err := rows.Columns()
	values := make([]string, len(columns))
	scanArgs := make([]interface{}, len(values))
	for i := range values {
		scanArgs[i] = &values[i]
	}

	for rows.Next() {
		err = rows.Scan(scanArgs...)
		if err != nil {
			panic(err.Error())
		}
		var value string
		var record Record
		record.dataMap = make(map[string]string)
		for i, col := range values {
			value = string(col)
			record.dataMap[columns[i]] = value
			//fmt.Println("map:%s",record.dataMap)
		}
		//fmt.Println("-----------------------------------")
		dataList.Add(record)
	}
	if err = rows.Err(); err != nil {
		panic(err.Error())
	}
	return dataList
}

3、获取返回值,并且放入Record

刚刚代码里的ArrayList,是手动实现的,当然手动指额外粘贴进来的(代码来源)。

虽然返回了ArrayList,但是和Java不同,没有泛型,所以还得强制转换成Record。

for i:=0;i<recs.Size();i++ {
	rec,_:= recs.Get(i).(gdb.Record)
	fmt.Println("rec",rec)
}

4、Record具备dataMap和getStr(col string)等数据和方法

Record的定义(这是最基本的,之后陆续添加):

type Record struct {
	dataMap map[string]string
}

func (record Record) getStr(column string) string {
	dm := record.dataMap
	return dm[column]
}

5、可以获取若干的参数(目前只接收string类型)

方法名这样定义即可接收多个参数:

func Query(sql string, para ...string) ArrayList{
	var dataList ArrayList
	//获取参数值
	for i := 0; i < len(para); i++ {

	}
    ......
}

实现时用stmt传入参数即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值