gin数据库

testDB这个是创建的数据库,并授权

 create database testDB;
grant all privileges on testDB.* to test@localhost;
flush privileges;// 刷新
 use mysql;
 use testDB;
 CREATE TABLE `book`( `id` int(50) NOT NULL AUTO_INCREMENT,`title` VARCHAR(50) DEFAULT NULL,`price` INT(50) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 INSERT INTO `book`(`id`,`title`,`price`)values(1,'Java',50),(2,'go',100),(3,'c',150);
package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    // 初始化数据库
    err := initDB()
    if err != nil {
        fmt.Println(err)
        return
    }
    r := gin.Default()
    // 加载页面
    r.LoadHTMLGlob("./book/templates/*")
    // 查询所有图书
    r.GET("/book/list", bookListHandler)
    _ = r.Run(":8000")
}

func bookListHandler(c *gin.Context) {
    bookList, err := queryAllBook()
    if err != nil {
        c.JSON(http.StatusOK, gin.H{
            "code": 1,
            "msg":  err,
        })
        return
    }
    // 返回数据
    c.HTML(http.StatusOK, "book_list.html", gin.H{
        "code": 0,
        "data": bookList,
    })
}




## gin原生数据库

package main

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

var sqlDb *sql.DB //数据库连接db
var sqlResponse SqlResponse //响应client的数据
func init() {
//1、打开数据库
//parseTime:时间格式转换(查询结果为时间时,是否自动解析为时间);
// loc=Local:MySQL的时区设置
sqlStr := "root:123456@tcp(127.0.0.1:3306)/testdb?charset=utf8&parseTime=true&loc=Local"
var err error
sqlDb, err = sql.Open("mysql", sqlStr)
if err != nil {
fmt.Println("数据库打开出现了问题:", err)
return
}
//2、 测试与数据库建立的连接(校验连接是否正确)
err = sqlDb.Ping()
if err != nil {
fmt.Println("数据库连接出现了问题:", err)
return
}
}

//Client提交的数据
type SqlUser struct {
Name string json:"name"
Age int json:"age"
Address string json:"address"
}

//应答体(响应client的请求)
type SqlResponse struct {
Code int json:"code"
Message string json:"message"
Data interface{} json:"data"
}

func main() {
r := gin.Default()
//数据库的CRUD--->gin的 post、get、put、delete方法
r.POST("sql/insert", insertData) //添加数据
r.GET("sql/get",getData) //查询数据(单条记录)
r.GET("sql/mulget",getMulData)//查询数据(多条记录)
r.PUT("sql/update",updateData)//更新数据
r.DELETE("sql/delete",deleteData)//删除数据
r.Run(":9090")
}

func deleteData(c gin.Context) {
name:=c.Query("name")
var count int
//1、先查询
sqlStr:="select count(
) from user where name=?"
err := sqlDb.QueryRow(sqlStr, name).Scan(&count)
if count<=0||err!=nil{
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "删除的数据不存在"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
//2、再删除
delStr:="delete from user where name=?"
ret, err := sqlDb.Exec(delStr, name)
if err != nil {
fmt.Printf("delete failed, err:%v\n", err)
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "删除失败"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
sqlResponse.Code = http.StatusOK
sqlResponse.Message = "删除成功"
sqlResponse.Data = "OK"
c.JSON(http.StatusOK, sqlResponse)
fmt.Println(ret.LastInsertId()) //打印结果
}

func updateData(c *gin.Context) {
var u SqlUser
err := c.Bind(&u)
if err != nil {
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "参数错误"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
sqlStr:="update user set age=? ,address=? where name=?"
ret, err := sqlDb.Exec(sqlStr, u.Age, u.Address, u.Name)
if err != nil {
fmt.Printf("update failed, err:%v\n", err)
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "更新失败"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
sqlResponse.Code = http.StatusOK
sqlResponse.Message = "更新成功"
sqlResponse.Data = "OK"
c.JSON(http.StatusOK, sqlResponse)
fmt.Println(ret.LastInsertId()) //打印结果
}

func getMulData(c *gin.Context) {
address:=c.Query("address")
sqlStr:="select name,age from user where address=?"
rows, err := sqlDb.Query(sqlStr, address)
if err!=nil {
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "查询错误"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
defer rows.Close()
resUser:=make([]SqlUser,0)
for rows.Next(){
var userTemp SqlUser
rows.Scan(&userTemp.Name,&userTemp.Age)
userTemp.Address=address
resUser=append(resUser,userTemp)
}
sqlResponse.Code = http.StatusOK
sqlResponse.Message = "读取成功"
sqlResponse.Data=resUser
c.JSON(http.StatusOK, sqlResponse)
}

func getData(c *gin.Context) {
name:=c.Query("name")
sqlStr:="select age,address from user where name=?"
var u SqlUser
err := sqlDb.QueryRow(sqlStr, name).Scan(&u.Age, &u.Address)
if err!=nil {
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "查询错误"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
u.Name=name
sqlResponse.Code = http.StatusOK
sqlResponse.Message = "读取成功"
sqlResponse.Data = u
c.JSON(http.StatusOK, sqlResponse)
}

func insertData(c *gin.Context) {
var u SqlUser
err := c.Bind(&u)
if err != nil {
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "参数错误"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
sqlStr := "insert into user(name, age, address) values (?,?,?)"
ret, err := sqlDb.Exec(sqlStr, u.Name, u.Age, u.Address)
if err != nil {
fmt.Printf("insert failed, err:%v\n", err)
sqlResponse.Code = http.StatusBadRequest
sqlResponse.Message = "写入失败"
sqlResponse.Data = "error"
c.JSON(http.StatusOK, sqlResponse)
return
}
sqlResponse.Code = http.StatusOK
sqlResponse.Message = "写入成功"
sqlResponse.Data = "OK"
c.JSON(http.StatusOK, sqlResponse)
fmt.Println(ret.LastInsertId()) //打印结果

}

//todo: go-sql-driver地址:https://github.com/go-sql-driver/mysql

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容