Go语言中如何进行数据库查询操作

2025-11-16 18:50

本文主要是介绍Go语言中如何进行数据库查询操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三...

查询函数QueryRow和Query详细对比

特性QueryRowQuery
返回值数量1个:*sql.Row2个:(*sql.Rows, error)
错误处理时机Scan()时处理立即处理 + 遍历后检查
适用场景确定只有单行结果可能有多行结果
资源释放自动管理必须手动调用rows.Close()
结果遍历直接调用Scan()循环rows.Next() + rows.Scan()
空结果处理返回sql.ErrNoRows空结果集不报错,循环0次

initDB()   连接数据库

package main
import (
	"database/sql"
	"log"
)
func initDB() {
	var err error
	// 设置一下dns charset:编码方式 parseTime:是否解析time类型 loc:时区
	dsn := "rootname:password@tcp(127.0.0.1:3306)/table?charset=utf8&parseTime=True&loc=Local"
//rootname 和 password 和 table 是自定义的 需要自己设置数据库
	db, err = sql.Open("mysql", dsn) // 打开mysql驱动
	// sql.Open():
	//   第一个参数:驱动名称"mysql"
	//   第二个参数:DSN连接字符串
	//   返回值:1.db *sql.DB:数据库连接对象指针  2.err error:错误信息
	if err != nil { // 若有错误信息:
		log.Fatalln(err) // log.Fatalln()会在打印错误信息后调用os.Exit(1)终止程序
	}
	err = db.Ping() // 用于验证DSN是否正确,数据库是否可访问,Ping()是正式连接
	if err != nil {
		log.Fatalln(err)
	}
	log.Println("Successfully connected!")
	return
}

main主函数

package main
import (
	"database/sql"                     // 标准库
	_ "gjsithub.com/go-sql-driver/mysql" // MySQL驱动
)
// 定义一个全局对象db
var db *sql.DB
// 定义student结构体
type student struct {
	id   int
	name string
	age  int
}
func main() {
	// 初始化连接
	initDB()
	defer db.Close() // defer关键字确保在main函数退出前执行数据库关闭操作
	// 延迟执行 相当于堆在栈中 最后按照顺序出栈
	// db.Close() 关闭数据库 释放资源
	// 调用查询函数
	queryRowDemo()
	queryMultiRowDemo()
	//先initDB(),再queryRowDemo(),queryMultiRowDemo(),最后db.Clospythone()
}

queryMultiRowDemo()    查询多行数据

package main
import "fmt"
func queryMultiRowDemo() {
	sqlStr := "select id,name,age from student where id >?" //sql语句
	rows, err := db.Query(sqlStr, 0)                        //Query返回值有2个:(*sql.Rows, error)
	if err != nil {
		fmt.Printf("scan failed, err:%v\n", err)
		rethttp://www.chinasem.cnurn
	}
	defer rows.Close() //用多行查询一定要关闭
	for rows.Next() { //rows.Next() 移到下一行记录
		//rows.Next() 在还有数据时返回 true,没有数据时返回 false
		var u student
		err := rows.Scan(&u.id, &u.name, &u.age) //每行数据单独处理
		if err != nil {
			fmt.Printf("scan failed, err:%v\n", err)
			return
		}
		fmt.Printf("id:%d name:%s age:%v\n", u.id, u.name, u.age)
	}
}

queryRowDemo()     查询单行数据

package main
import "fmt"
// 查询单条数据示例
func queryRowDemo() {
	sqlStr := "select id,name,age from student where id = ?"
	var u student
	row := db.QueryRow(sqlStr, 1) //db.QueryRow(sqlStr,1) 表示单行数据
	//QueryRow 不返回error,错误在后续Scan中处理
	err := row.Scan(&u.id, &u.name, &u.age) //单行查询直接Scan Scan里面是取地址
	if err != nil {
		fmt.Printf("Scan failed, err:%v\n", err)
		return
	}
	fmt.Printf("id:%d,name:%s, age:%d\n", u.id, u.name, u.age)
}
//go查询数据: 先sqlStr:表示sql语句 里面有未知参数?
//var u student u表示一个结构体Student
//接下来就是套路:先用db.QueryRow函数 两个参数 一个sqlStr,另一个表示未知参js数的具体值
//紧接着用Scan函数取出数据库里的值 里面的参数一定是带取地址符
//对err进行判断 最后打印

以下是我自己数据库的demo

Go语言中如何进行数据库查询操作

运行结果

Go语言中如何进行数据库查询操作

到此这篇关于Go语言中如何进行数据库查询操作的文章就介绍到这了,更多相关go数据库查询内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的js相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Go语言中如何进行数据库查询操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156188

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询