欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go使用SQLX操作MySQL數(shù)據(jù)庫(kù)的教程詳解

 更新時(shí)間:2023年11月18日 10:37:16   作者:考慮考慮  
sqlx 是 Go 語(yǔ)言中一個(gè)流行的操作數(shù)據(jù)庫(kù)的第三方包,它提供了對(duì) Go 標(biāo)準(zhǔn)庫(kù) database/sql 的擴(kuò)展,簡(jiǎn)化了操作數(shù)據(jù)庫(kù)的步驟,下面我們就來(lái)學(xué)習(xí)一下go如何使用SQLX實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的一些基本操作吧

前言

sqlx 是 Go 語(yǔ)言中一個(gè)流行的操作數(shù)據(jù)庫(kù)的第三方包,它提供了對(duì) Go 標(biāo)準(zhǔn)庫(kù) database/sql 的擴(kuò)展,簡(jiǎn)化了操作數(shù)據(jù)庫(kù)的步驟,并且擁有很大的數(shù)據(jù)庫(kù)交互方法,本文使用mysql

sqlx使用

1.下載sqlx包

使用以下命令下載sqlx

 go get github.com/jmoiron/sqlx

2.引入驅(qū)動(dòng)

_ "github.com/go-sql-driver/mysql"

3.連接數(shù)據(jù)庫(kù)說(shuō)明

其連接數(shù)據(jù)庫(kù)使用

user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True

其中user為數(shù)據(jù)庫(kù)用戶,password為數(shù)據(jù)庫(kù)密碼

4.連接數(shù)據(jù)庫(kù)代操作

package main

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


var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫(kù)異常:", err)
		return
	}
	db = mysqlDb
}

5.插入數(shù)據(jù)

創(chuàng)建數(shù)據(jù)庫(kù)表位student

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `sex` int(11) NULL DEFAULT NULL,
  `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1690290594064429066 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

插入數(shù)據(jù)代碼為:

package main

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

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫(kù)異常:", err)
		return
	}
	db = mysqlDb
	r, err1 := db.Exec("insert into user(mobile, password, sex, user_name)values(?, ?, ?, ?)", "aaa", "123456", 1, "aaa")
	if err1 != nil {
		fmt.Println("數(shù)據(jù)插入異常, ", err1)
		return
	}
	id, err2 := r.LastInsertId()
	if err2 != nil {
		fmt.Println("獲取id異常:, ", err2)
		return
	}

	fmt.Println("id為:", id)
}

6.查詢數(shù)據(jù)

package main

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

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫(kù)異常:", err)
		return
	}
	db = mysqlDb
	var user []User
	err1 := db.Select(&user, "select id, user_name, sex, mobile, password from user where id=?", 1690290594064429065)
	if err1 != nil {
		fmt.Println("查詢異常, ", err1)
		return
	}

	fmt.Println("查詢數(shù)據(jù)為:", user)
}

之所以password使用類(lèi)型sql.NullString,是因?yàn)槿绻袨閚ull的話,會(huì)報(bào)錯(cuò),所以其會(huì)返回

遍歷false去判斷

7.更新數(shù)據(jù)

package main

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

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫(kù)異常:", err)
		return
	}
	db = mysqlDb
	res, err := db.Exec("update user set user_name=? where id=?", "hello11", 1690290594064429065)
	if err != nil {
		fmt.Println("更新失敗:", err)
		return
	}
	row, err1 := res.RowsAffected()
	if err1 != nil {
		fmt.Println("獲取失敗, ", err1)
		return
	}
	fmt.Println("更新成功行數(shù):", row)
}

8.刪除數(shù)據(jù)

package main

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

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫(kù)異常:", err)
		return
	}
	db = mysqlDb
	res, err := db.Exec("delete from user where id=?", 1690290594064429065)
	if err != nil {
		fmt.Println("刪除失敗, ", err)
		return
	}

	row, err := res.RowsAffected()
	if err != nil {
		fmt.Println("刪除行數(shù)為:", err)
		return
	}

	fmt.Println("刪除行數(shù)為: ", row)
}

總結(jié)

go有很多優(yōu)秀的操作數(shù)據(jù)庫(kù)組件,都能提高開(kāi)發(fā)效率,至于在開(kāi)發(fā)中怎么選擇組件,看個(gè)人開(kāi)發(fā)效率和習(xí)慣

到此這篇關(guān)于go使用SQLX操作MySQL數(shù)據(jù)庫(kù)的教程詳解的文章就介紹到這了,更多相關(guān)go SQLX操作MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析

    go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析

    這篇文章主要為大家介紹了go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go語(yǔ)言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法

    Go語(yǔ)言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法

    這篇文章主要介紹了Go語(yǔ)言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法,涉及Go語(yǔ)言相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go?select使用與底層原理講解

    Go?select使用與底層原理講解

    這篇文章主要介紹了Go?select使用與底層原理講解,select是Go提供的IO多路復(fù)用機(jī)制,可以用多個(gè)cas同時(shí)監(jiān)聽(tīng)多個(gè)channl的讀寫(xiě)狀態(tài),相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Go語(yǔ)言struct要使用?tags的原因解析

    Go語(yǔ)言struct要使用?tags的原因解析

    這篇文章主要介紹了為什么?Go?語(yǔ)言?struct?要使用?tags,在本文中,我們將探討為什么 Go 語(yǔ)言中需要使用 struct tags,以及 struct tags 的使用場(chǎng)景和優(yōu)勢(shì),需要的朋友可以參考下
    2023-03-03
  • 使用Go語(yǔ)言啟動(dòng)Redis的實(shí)例詳解

    使用Go語(yǔ)言啟動(dòng)Redis的實(shí)例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言中一個(gè)可以用來(lái)啟動(dòng)?redis-server?的開(kāi)源庫(kù)?github.com/stvp/tempredis,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Go json omitempty如何實(shí)現(xiàn)可選屬性

    Go json omitempty如何實(shí)現(xiàn)可選屬性

    在Go語(yǔ)言中,使用`omitempty`可以幫助我們?cè)谶M(jìn)行JSON序列化和反序列化時(shí),忽略結(jié)構(gòu)體中的零值或空值,本文介紹了如何通過(guò)將字段類(lèi)型改為指針類(lèi)型,并在結(jié)構(gòu)體的JSON標(biāo)簽中添加`omitempty`來(lái)實(shí)現(xiàn)這一功能,例如,將float32修改為*float32
    2024-09-09
  • go語(yǔ)言中json處理方式詳解

    go語(yǔ)言中json處理方式詳解

    這篇文章主要介紹了go語(yǔ)言中json處理方式,文中通過(guò)實(shí)例代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-05-05
  • 詳解Go語(yǔ)言中如何創(chuàng)建Cron定時(shí)任務(wù)

    詳解Go語(yǔ)言中如何創(chuàng)建Cron定時(shí)任務(wù)

    Cron是一個(gè)強(qiáng)大的定時(shí)任務(wù)調(diào)度庫(kù),它允許開(kāi)發(fā)者在Go應(yīng)用中方便地設(shè)置和管理定時(shí)任務(wù),本文將結(jié)合具體案例,詳細(xì)介紹Cron在Go語(yǔ)言中的用法,需要的可以參考下
    2024-10-10
  • golang使用swagger的過(guò)程詳解

    golang使用swagger的過(guò)程詳解

    這篇文章主要介紹了golang使用swagger的過(guò)程詳解,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 在Golang中使用iota案例詳解

    在Golang中使用iota案例詳解

    在Go語(yǔ)言中,iota是一個(gè)預(yù)定義的標(biāo)識(shí)符,用于在常量聲明中生成連續(xù)的遞增值,iota的值從0開(kāi)始,每次在常量聲明中使用時(shí)遞增,本就給大家講解一下Golang中iota的使用案例,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-07-07

最新評(píng)論