当前位置:网站首页>Go language sqlx library operation SQLite3 database addition, deletion, modification and query
Go language sqlx library operation SQLite3 database addition, deletion, modification and query
2022-07-02 23:01:00 【xuehu96】
0. quote
sqlx
Than database/sql
It's better to use a little , In fact, almost …
sqlx Address :https://github.com/jmoiron/sqlx
import (
"database/sql"
"fmt"
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
)
1. Connect to database
- sql.Open
- sql.Close
var db *sql.DB
func InitDB() (err error) {
dsn := "./data.db"
db, err = sql.Open("sqlite3",dsn)
if err != nil {
fmt.Printf("connect DB failed, err:%v\n", err)
return
}
return
}
func Close() {
db.Close()
}
Generally, there is no error when connecting to the database , If the file does not exist, it will be created
2. Create data table
SQLite A file is a database , Just create a new data table under the database
func testCreateTable() error {
sqlc := ` CREATE TABLE "user_info" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "uid" INTEGER(8) NOT NULL, "name" text(255) NOT NULL, "group" TEXT(255) NOT NULL, "balance" integer(8) NOT NULL, "proportion" real(8) NOT NULL, "create_time" integer(4) NOT NULL, "comments" TEXT(255) ); CREATE INDEX "indexs" ON "user_info" ( "name", "group" ); CREATE UNIQUE INDEX "uniques" ON "user_info" ( "uid" ); `
_, err := db.Exec(sqlc)
if err != nil {
return err
}
return nil
}
3. Additions and deletions
Addition, deletion, modification and MySQL PostgreSQL It's almost the same
Refer to the previous article :https://blog.csdn.net/xuehu96/article/details/124648300
The code hardly needs to be changed
After testing , Place holder with $1, $2, $3 and ?,?,? It's all right
3.1 insert
func testInsert() error {
sqli := `INSERT INTO "main"."user_info" ("uid", "name", "group", "balance", "proportion", "create_time", "comments") VALUES ($1, $2, $3, $4, $5, $6, $7);`
_, err := db.Exec(sqli, 100, "xuehu96", " Group ", 2.33, 27.148, "2022-06-27 18:11:22", nil)
if err != nil {
return err
}
fmt.Printf("insert success\n")
return nil
}
3.2 delete
Delete id by 2 The line of
func testDelete() error {
sqld := `DELETE FROM "main"."user_info" WHERE "id" = $1`
ret, err := db.Exec(sqld, 2)
if err != nil {
fmt.Printf("delete failed, err:%v\n", err)
return err
}
n, err := ret.RowsAffected() // Number of rows affected by operation
if err != nil {
fmt.Printf("get RowsAffected failed, err:%v\n", err)
return err
}
fmt.Printf("delete success, affected rows:%d\n", n)
return nil
}
3.3 update
hold uid by 3 Of name Change to Zhang San
func testUpdate() error {
sqlu := `UPDATE "main"."user_info" SET "name" = $1 WHERE "uid" = $2`
//sqlu := `UPDATE "main"."user_info" SET "name" = ? WHERE "uid" = ?` // use ? Space occupying is also OK
ret, err := db.Exec(sqlu, " Zhang San ", 3)
if err != nil {
fmt.Printf("update failed, err:%v\n", err)
return err
}
n, err := ret.RowsAffected() // Number of rows affected by operation
if err != nil {
fmt.Printf("get RowsAffected failed, err:%v\n", err)
return err
}
fmt.Printf("update success, affected rows:%d\n", n)
return nil
}
4. check
Write a query structure first , Bind directly after finding
type UserInfoType struct {
Id int `db:"id"`
Uid int64 `db:"uid"`
Name string `db:"name"`
Group string `db:"group"`
Balance float64 `db:"balance"`
Proportion float64 `db:"proportion"`
CreateTime string `db:"create_time"` // SQLite Doesn't seem to support time.Time
Comments sql.NullString `db:"comments"`
}
4.1 Query single line data
func testSelectOne() error {
sqls := `SELECT * FROM "main"."user_info" WHERE "uid" = $1`
var user UserInfoType
err := db.Get(&user, sqls, 3)
if err != nil {
fmt.Printf("get failed, err:%v\n", err)
return err
}
fmt.Printf("one user: %#v\n", user)
return nil
}
4.2 Query multiple rows of data
func testSelectAll() error {
sqls := `SELECT * FROM "main"."user_info" WHERE "uid" > $1`
var users []UserInfoType
err := db.Select(&users, sqls, 0)
if err != nil {
fmt.Printf("query failed, err:%v\n", err)
return err
}
fmt.Printf("all users: %#v\n", users)
return nil
}
5. main function
func main() {
err := InitDB()
if err != nil {
panic(err)
}
defer CloseDB()
err = testSelectAll()
if err != nil {
panic(err)
}
}
边栏推荐
猜你喜欢
景联文科技低价策略帮助AI企业降低模型训练成本
PMP project integration management
MySQL查询附近的数据.并按距离进行排序.
[chestnut sugar GIS] how does global mapper batch produce ground contour lines through DSM
The motivation of AES Advanced Encryption Protocol
创新实力再获认可!腾讯安全MSS获2022年度云原生安全守护先锋
数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
Data analysis learning records -- complete a simple one-way ANOVA with Excel
P7072 [CSP-J2020] 直播获奖
Analyse des données dossiers d'apprentissage - - analyse simple de la variance à facteur unique avec Excel
随机推荐
Jerry's built-in shutdown current is 1.2ua, and then it can't be turned on by long pressing [chapter]
移动端 1px 像素兼容性问题,实现1px 边框
Storage unit conversion
杰理之直接触摸样机的顶针反应不正常【篇】
Higher order operation of bits
杰理之如何测试按键的误触率【篇】
杰理之内置关机电流 1.2uA,之后不能长按开机【篇】
mysql重置密码,忘记密码,重置root密码,重置mysql密码
损失函数~
小鹏P7出事故,安全气囊未弹出,这正常吗?
【板栗糖GIS】arcmap—如何批量修改注记要素的字体,颜色,大小等
Jericho's thimble reaction when directly touching the prototype is abnormal [chapter]
Uniapp wechat login returns user name and Avatar
P7072 [CSP-J2020] 直播获奖
Go multithreaded data search
数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
Zhong Xuegao responded that the product will not melt for 1 hour: it contains solid components and cannot melt into water
杰理之样机在多次触摸后会触发关机【篇】
[Luogu p1541] tortoise chess [DP]
悬镜安全在RSAC2022上斩获Global InfoSec Awards四项大奖