Go语言原生数据库操作(六)—— 数据库
文章目录
- 一、重点内容:
- 知识要点有哪些?
- 1、理解database/SQL
- 2、数据库表数据的CRUD
- 二、详细知识点介绍:
- 1、数据库导入
- 下载导入数据库驱动:
- 创建数据库表:
- 创建数据库连接:
- 2、数据库的CRUD:
- 初始化:
- 查询数据:
- 1、多行查询:
- 2、单行查询:
- 3、预编译查询
- 插入数据:
- 更新数据:
- 删除数据:
- 3、数据库设计原理
- 4、完整代码:
- 三、课后个人总结:
一、重点内容:
知识要点有哪些?
1、理解database/SQL
2、数据库表数据的CRUD
二、详细知识点介绍:
1、数据库导入
下载导入数据库驱动:
go get github.com/go-sql-driver/mysql
创建数据库表:
CREATE TABLE `user` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`username` VARCHAR(20) DEFAULT '',`age` INT(11) DEFAULT '0',`score` int default 0PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
创建数据库连接:
db, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")
if err != nil {log.Fatal(err)
}
defer rows.Close()
2、数据库的CRUD:
初始化:
/*
*
初始化
*/
var db *sql.DBfunc init() {db1, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")db = db1if err != nil {log.Fatal(err)}
}
查询数据:
方便查询我们先建立一个实体结构体:
type user struct {id intusername stringage intscore int
}
1、多行查询:
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id intusername stringage intscore int
}var db *sql.DBfunc main() {db1, err := sql.Open("mysql", "root:XXXX@tcp(127.0.0.1:3306)/mybatis")db = db1if err != nil {log.Fatal(err)}rows, err := db.Query("select * from user ")if err != nil {log.Fatal(err)}for rows.Next() {var user1 userrows.Scan(&user1.id, &user1.username, &user1.age, &user1.score)fmt.Println(user1.id, user1.username, user1.age, user1.score)}defer rows.Close()
}
测试:
2、单行查询:
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id intusername stringage intscore int
}var db *sql.DBfunc main() {db1, err := sql.Open("mysql", "root:XXXXX@tcp(127.0.0.1:3306)/mybatis")db = db1sqlStr := "select * from user where id=?"var u user// 非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.username, &u.age, &u.score)if err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("id:%d name:%s age:%d\n", u.id, u.username, u.age)defer rows.Close()
}
测试:
3、预编译查询
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id intusername stringage intscore int
}func main() {open, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")if err != nil {log.Fatal(err)}sqlStr := "select * from user where id>?"prepare, err := open.Prepare(sqlStr)if err != nil {log.Fatal(err)}query, err := prepare.Query(1)for query.Next() {var u userquery.Scan(&u.id, &u.username, &u.age, &u.score)fmt.Println(u.id, u.username, u.age, u.score)}query.Close()open.Close()
}
测试:
插入数据:
/*
插入新的数据,ID自增
*/
func insertRow(name string, age int, score int) {sqlStr := "insert into user(username,age,score) values (?,?,?)"exec, err := db.Exec(sqlStr, name, age, score)if err != nil {log.Fatal(err)}id, err := exec.LastInsertId()if err != nil {log.Fatal(err)}fmt.Println(id)
}
更新数据:
/*
更新数据
*/
func updateRow(id int, score int) {sqlStr := "update user set score=? where id=?"exec, err := db.Exec(sqlStr, score, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}
删除数据:
/*
根据ID删除数据
*/
func deleteRow(id int) {sqlStr := "delete from user where id =?"exec, err := db.Exec(sqlStr, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}
3、数据库设计原理
4、完整代码:
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id intusername stringage intscore int
}func main() {fmt.Println("查询所有记录")queryAll()fmt.Println("根据ID查询")queryRowDemo(1)fmt.Println("插入新的数据")insertRow("罗某", 21, 78)fmt.Println("查询分数大于多少的数据")queryByScore(96)fmt.Println("更新数据")updateRow(3, 50)fmt.Println("删除数据")deleteRow(6)
}/*
*
初始化
*/
var db *sql.DBfunc init() {db1, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")db = db1if err != nil {log.Fatal(err)}
}/*
查询所有记录
*/
func queryAll() {rows, err := db.Query("select * from user ")if err != nil {log.Fatal(err)}for rows.Next() {var user1 userrows.Scan(&user1.id, &user1.username, &user1.age, &user1.score)fmt.Println(user1.id, user1.username, user1.age, user1.score)}defer rows.Close()
}/*
根据ID查询
*/
func queryRowDemo(id int) {sqlStr := "select * from user where id=?"var u user// 非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放err := db.QueryRow(sqlStr, id).Scan(&u.id, &u.username, &u.age, &u.score)if err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("id:%d name:%s age:%d\n", u.id, u.username, u.age)
}/*
条件查询,分数大于多少的数据
*/
func queryByScore(score int) {sqlStr := "select * from user where score>?"prepare, err := db.Prepare(sqlStr)if err != nil {log.Fatal(err)}query, err := prepare.Query(score)for query.Next() {var u userquery.Scan(&u.id, &u.username, &u.age, &u.score)fmt.Printf("id:%d name:%s age:%d score:%d\n", u.id, u.username, u.age, u.score)}
}/*
插入新的数据,ID自增
*/
func insertRow(name string, age int, score int) {sqlStr := "insert into user(username,age,score) values (?,?,?)"exec, err := db.Exec(sqlStr, name, age, score)if err != nil {log.Fatal(err)}id, err := exec.LastInsertId()if err != nil {log.Fatal(err)}fmt.Println(id)
}/*
更新数据
*/
func updateRow(id int, score int) {sqlStr := "update user set score=? where id=?"exec, err := db.Exec(sqlStr, score, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}/*
根据ID删除数据
*/
func deleteRow(id int) {sqlStr := "delete from user where id =?"exec, err := db.Exec(sqlStr, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}
三、课后个人总结:
这次比较深入地去了解学习了go中数据库的操作,收获颇多。也开始了GORM库的学习,下一篇文章记录GORM的使用。
Go语言原生数据库操作(六)—— 数据库相关推荐
- golang odbc mysql_go语言通过odbc操作Access数据库的方法
本文实例讲述了go语言通过odbc操作Access数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,下载地址为:https://github.com/weigj/go-od ...
- java 读取mysql数据库_原生Java操作mysql数据库过程解析
这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.引入数据库驱动的jar包 以通过mav ...
- 用C语言API(常用)操作MySql数据库
连接数据库的步骤 MySql数据库是一个典型的C/S结构,包括客户端和服务器.当部署好了MySql服务器,想通过程序访问服务端的数据,在编写程序的时候,可以通过官方提供的C语言API来实现. ...
- Golang原生sql操作Mysql数据库增删改查
Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...
- python的数据库_python数据库操作-mysql数据库
一:连接 1:本地连接 mysql -u用户名 -p密码 2:连接远程服务器 mysql -u用户名 -p密码 -hip地址 -P端口号 线下修改远程服务端上部署的mysql服务器 二:创建数据库 c ...
- 数据库实验六 数据库的完整性
实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...
- yii mysql数据库操作_Yii2数据库操作常用方法小结
本文实例讲述了Yii2数据库操作常用方法.分享给大家供大家参考,具体如下: 查询: // find the customers whose primary key value is 10 $custo ...
- python如何查询数据库_Python数据库操作手册-数据库专栏,SQL Server
数据库的操作在现在的python里面已经变得十分的好用,有了一套api标准.下面的就是讲讲如何的去使用这套框架定义.此框架包含以下部分模块接口 连接对象 游标对象 dbi辅助对象 数据类型与定义 如何 ...
- mysql多数据源切换_CI 多数据库操作 切换数据库
CI 切换数据库是很方便的,如: 连接多数据库 如果你需要同时连接多于一个的数据库,你可以用以下方式来实现:$DB1 = $this->load->database('group_one' ...
- python封装数据库操作_Python3 数据库操作小封装
import pymysql ''' SQLController:对数据库操作 私有: __sql_connect(self): 作用:建立数据库连接 返回:数据库连接对象 __sql_insert_ ...
最新文章
- Centos7.5虚拟机无法ping通网关、外网IP地址
- Struts2国际化文件乱码解决
- i386和X86各是什么意思
- linux动态链接库软件,Linux 动态链接库
- php ajax取不到值,PHP没有从Ajax获取值
- java maven导入导出_Java +EasyUI+SpringMvc实现Excle导入导出(上)
- 深入理解simhash原理
- oc代码混淆_OC代码混淆工具
- 配置远程登陆交换机方法
- 怎样合理地定义用户流失
- STM32系统结构图理解及GPIO学习笔记
- STM8L串口中断进不去
- html的富文本有什么用,html中怎样使用富文本
- 遗传算法 - 简单介绍
- APP - 支付宝怎么延时转账?能否撤回转账?
- 机器人常用传感器学习总结
- JAVA中的各种引用
- SAP 更改登录界面图片
- 英文参考文献按照首字母排序使用matlab实现
- 当效益不好的时候为什么公司选择裁员,而不是降薪
热门文章
- 你说 文/江湖一劍客
- php cgminer,CGMINER中各个参数代表的意义(挖矿黑框参数)
- Java: String概述、对象创建的内存原理
- 那些年啊,那些事——一个程序员的奋斗史 ——124
- STM32串口中断程序-迪文屏,
- github怎么切换到gitee_将博客从github迁移至gitee
- 人脸识别毕业设计python_25 行 Python 代码毕业设计实现人脸识别
- 2022-2028年中国云制造行业深度调研及投资前景预测报告
- 了解escape、unescape
- 利用实际数据对期权希腊字母绘图_20200525_