当前位置: 首页 > news >正文

goweb连接数据库操作

连接数据库

增加

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//打开链接
	db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
	db.Ping()
	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	if err != nil {
		fmt.Println("数据库连接失败")
		return
	}
	//预处理sql
	stmt, err := db.Prepare("insert into people values(default,?,?)")
	defer func() {
		if stmt != nil {
			stmt.Close()
		}
	}()
	if err != nil {
		fmt.Println("预处理失败")
		return
	}
	result, err := stmt.Exec("张三", "大海")
	if err != nil {
		fmt.Println("sql失败")
		return
	}
	//获取结果
	count, err := result.RowsAffected()
	if err != nil {
		fmt.Println("获取结果失败")
		return
	}
	if count > 0 {
		fmt.Println("新增成功")
	} else {
		fmt.Println("新增失败")
	}

	//可能需要获取新增时主键的值
	id, _ := result.LastInsertId()
	fmt.Println(id)
}

修改

修改和新增类似,只是不需要获取LastInsertId()和Sql语句是修改语句

在Golang中要求:如果修改前和修改后的值相同,RowAffected()返回0,即修改失败

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db, _ := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	stmt, _ := db.Prepare("update people set name = ? where id = ?")
	defer func() {
		if stmt != nil {
			stmt.Close()
		}
	}()
	result, _ := stmt.Exec("李四", 2)
	count, _ := result.RowsAffected()
	if count > 0 {
		fmt.Println("修改成功")
	} else {
		fmt.Println("修改失败")
	}
}

删除

删除和修改,新增结构一样

在Go语言中要求如果要删除的数据不存在,RowsAffected()返回0

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db, _ := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	stmt, err := db.Prepare("delete from people where id = 3")
	if err != nil {
		fmt.Println("预处理出错")
	}
	defer func() {
		if stmt != nil {
			stmt.Close()
		}
	}()
	result, err := stmt.Exec()
	if err != nil {
		fmt.Println("执行失败")
		return
	}
	count, _ := result.RowsAffected()
	if count > 0 {
		fmt.Println("删除成功")
	} else {
		fmt.Println("删除失败")
	}
}

数据查询

Golang中执行查询与增删改中stmt的执行方法有区别,由于需要把查询的结果取出来,所以还需要进行取值处理

执行查询Sql时,stmt调用的是Query()方法

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
	if err != nil {
		fmt.Println("连接失败")
		return
	}
	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	stmt, err := db.Prepare("select * from people")
	if err != nil {
		fmt.Println("预处理失败")
		return
	}
	defer func() {
		if stmt != nil {
			stmt.Close()
		}
	}()
	rows, err := stmt.Query()
	if err != nil {
		fmt.Println("获取结果失败")
		return
	}
	defer func() {
		if rows != nil {
			rows.Close()
		}
	}()
	var id int
	var name, adderss string
	for rows.Next() {
		rows.Scan(&id, &name, &adderss)
		fmt.Println(id, name, adderss)
	}
}

相关文章:

  • 02_位掩码逻辑及Java示例
  • 阿里云备案有必要选择备案管家服务吗?自己ICP备案可以吗?
  • Java第四节:idea在debug模式夏改变变量的值
  • 详细解释:k ≈ 3 对应 99.7% 置信度
  • 大模型面经 | 手撕多头注意力机制(Multi-Head Attention)
  • 笔记本电脑突然无法开机电源灯亮但是屏幕无法点亮
  • GitLab 17.x 在 Ubuntu 24.04 上安装配置
  • 华为手机清理大数据的方法
  • JVM调优详解
  • Arduino示例代码讲解:String replace() 字符串替换
  • Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解
  • 【Android读书笔记】读书笔记记录
  • springboot 项目 jmeter简单测试流程
  • 【STM32单片机】#8 定时器编码器接口ADC模数转换器
  • 【Mysql】死锁问题详解
  • 用AI生成系统架构图
  • 在线上定位1G日志文件中的异常信息时,我这样做合适吗
  • 微信小程序实战案例 - 餐馆点餐系统 阶段 4 - 订单列表 状态
  • 《AI大模型应知应会100篇》第14篇:大模型商业化现状:主流应用场景及盈利模式
  • idea+vue3+mybatis+springBoot3前后端分离实现对一张表的增删改查(完整代码版)
  • 线上名片制作/seo外包公司报价
  • 做会计应关注什么网站/小网站
  • com网站域名可以是汉字吗/今日新闻快报
  • 素马杭州网站设计介绍/google chrome 网络浏览器
  • 外贸公司做网站/免费crm系统手机版
  • 手机上如何做网站/seo海外推广