原生SQL查询

栏目: 数据库 · 发布时间: 7年前

内容简介:版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84068613

版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84068613

type SqlController struct {
	beego.Controller
}

#Prepare

sql语句在发送到服务器时会做语法检查和编译,然而我们多次执行同一功能的 sql 语句,只是每次传递的参数不一致,所以我们可以通过Prepare进行预处理,这样服务器只需要,做一次语法检查和编译,极大的提高了执行sql语句的效率

func (this *SqlController) GetPrepare() {
	//1.创建orm
	orm := orm.NewOrm()
	p, err := orm.Raw("update user set name = ? where name = ?").Prepare()
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
		return
	}
	res, err := p.Exec("吴俏祥", "123")
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
	}
	n, err := res.RowsAffected()
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
	}
	fmt.Println("n = ", n)

	res, err = p.Exec("尹成大魔王", "mike")
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
	}
	n, err = res.RowsAffected()
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
	}
	fmt.Println("n = ", n)

	res, err = p.Exec("兄弟连", "asde")
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
	}
	n, err = res.RowsAffected()
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
	}
	fmt.Println("n = ", n)
	this.Ctx.WriteString("成功!")

}

#将将指定的字段解析到map

func (this *SqlController) GetRawsToMap() {
	//1.创建map
	res := make(orm.Params)
	//2.创建orm
	orm := orm.NewOrm()
	//3.通过sql语句查询
	//将user表中name作为键,nickname作为值存入map中,其中键是string类型,
	// 如果类型不匹配beego会自动转换为string类型
	/*n, err := orm.Raw("select nickname, name from user").
		RowsToMap(&res, "name", "nickname")*/
	n, err := orm.Raw("select * from user").RowsToMap(&res, "age", "name")
	//4.处理错误
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
		return
	}
	//5.打印结果
	fmt.Println("n = ", n)
	for key, value := range res {
		fmt.Println(key, " = ", value)
	}
	//6.给客户端返回数据
	this.Ctx.WriteString("查询成功!")
}

#QueryRows

func (this *SqlController) GetQueryRows(){
	//1.创建user切片
	var users []*models.User
	//2.创建orm
	orm := orm.NewOrm()
	//3.通过sql语句查询
	n, err := orm.Raw("select * from user where name = ?", "mike").QueryRows(&users)
	//4.处理错误
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
		return
	}
	//5.打印结果
	fmt.Println("n = ", n)
	for _, user := range users {
		fmt.Println("user = ", user)
	}
	//6.给客户端返回数据
	this.Ctx.WriteString("查询成功!")
}

#QueryRow

func (this *SqlController) GetQueryRow() {
	//1.创建user对象
	//user := models.User{}
	var user models.User
	//2.创建orm
	orm := orm.NewOrm()
	//3.通过sql语句查询
	err := orm.Raw("select * from user where id = ?", 3).QueryRow(&user)
	//4.处理错误
	if err != nil {
		fmt.Println("err = ", err)
		this.Ctx.WriteString("查询出错!")
		return
	}
	//5.打印结果
	fmt.Println("user = ", user)
	this.Ctx.WriteString("查询成功!")
}

#Exec

func (this *SqlController) GetRawAndExec() {
	//创建orm
	orm := orm.NewOrm()
	//raw函数中的参数是sql语句,形式参数通过?占位,后面提供的实际参数和?的顺序一一对应
	//Exec()函数的功能是执行sql语句
	res, err := orm.Raw("update user set name = ? where id = ?", "admin", 7).Exec()
	if err != nil {
		this.Ctx.WriteString("查询失败!")
		return
	}
	n, err := res.RowsAffected()//查询受影响的行数
	if err != nil {
		this.Ctx.WriteString("查询失败!")
		return
	}
	this.Ctx.WriteString("mysql row affected nums = " + strconv.Itoa(int(n)))
}

学院 Go 语言视频主页

https://edu.csdn.net/lecturer/1928

清华团队带你实战区块链开发

扫码获取海量视频及源码 QQ群:721929980

原生SQL查询

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

C陷阱与缺陷

C陷阱与缺陷

凯尼格 / 高巍 / 人民邮电出版社 / 2008-2-1 / 30.00元

作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。.. 全书分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。.. 本书......一起来看看 《C陷阱与缺陷》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试