網(wǎng)站首頁 編程語言 正文
需要下載sqlite3環(huán)境:
go get github.com/mattn/go-sqlite3
"github.com/mattn/go-sqlite3"
go操作sqlite3的示例代碼:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
)
const (
dbDriverName = "sqlite3"
dbname = "./data.db"
)
type user struct {
Username string
Age int
Job string
Hobby string
}
//封裝一個(gè)處理error的函數(shù),處理程序中的 err,
//有err的地方直接調(diào)用這個(gè)函數(shù)就可以了
func checkErr(e error) bool {
if e != nil {
log.Fatal(e)
return true
}
return false
}
//創(chuàng)建數(shù)據(jù)表的函數(shù)
func createTable(db *sql.DB) error {
sql := `create table if not exists "users" (
"id" integer primary key autoincrement,
"username" text not null,
"age" integer not null,
"job" text,
"hobby" text
)`
_, err := db.Exec(sql)
return err
}
//########插入數(shù)據(jù)#########
func insertData(db *sql.DB, u user) error {
sql := `insert into users (username, age, job, hobby) values(?,?,?,?)`
stmt, err := db.Prepare(sql)
if err != nil {
return err
}
_, err = stmt.Exec(u.Username, u.Age, u.Job, u.Hobby)
return err
}
//#########查詢數(shù)據(jù)并且返回切片列表########
//查詢所有數(shù)據(jù)
func queryDataAll(db *sql.DB) (listusers []user, e error) {
sql := `select * from users`
stmt, err := db.Prepare(sql)
if err != nil {
return nil, err
}
rows, err := stmt.Query()
if err != nil {
return nil, err
}
var result = make([]user, 0)
for rows.Next() {
var username, job, hobby string
var age, id int
rows.Scan(&id, &username, &age, &job, &hobby)
result = append(result, user{username, age, job, hobby})
}
return result, nil
}
//查詢帶有條件的數(shù)據(jù)函數(shù)
func queryData(db *sql.DB, name string) (listusers []user, e error) {
//sql := `select * from users `
sql := `select * from users where username=?`
stmt, err := db.Prepare(sql)
if err != nil {
return nil, err
}
rows, err := stmt.Query(name)
if err != nil {
return nil, err
}
var result = make([]user, 0)
for rows.Next() {
var username, job, hobby string
var age, id int
rows.Scan(&id, &username, &age, &job, &hobby)
result = append(result, user{username, age, job, hobby})
}
return result, nil
}
//########刪除數(shù)據(jù)#########
func delByID(db *sql.DB, id int) (bool, error) {
sql := `delete from users where id=?`
stmt, err := db.Prepare(sql)
if err != nil {
return false, err
}
res, err := stmt.Exec(id)
if err != nil {
return false, err
}
_, err = res.RowsAffected()
if err != nil {
return false, err
}
return true, nil
}
func editdata(db *sql.DB, u user, editid int) (bool, error) {
//sql := `update users set username=? age=? job=? hobby=? where id=?`
sql := `update users set username=? where id=?`
stmt, err := db.Prepare(sql)
if err != nil {
return false, err
}
res, err := stmt.Exec(u.Username, editid)
if err != nil {
return false, err
}
_, err = res.RowsAffected()
if err != nil {
return false, err
}
return true, nil
}
func editdata_bak(db *sql.DB, u user, editid int) (bool, error) {
//sql := `update users set username=? age=? job=? hobby=? where id=?`
sql := `update users set username=? age=? job=? hobby=? where id=?`
stmt, err := db.Prepare(sql)
if err != nil {
return false, err
}
res, err := stmt.Exec(u.Username, u.Age, u.Job, u.Hobby, editid)
if err != nil {
return false, err
}
_, err = res.RowsAffected()
if err != nil {
return false, err
}
return true, nil
}
//#################
//######主函數(shù)###########
func main() {
//初始sqlite3數(shù)據(jù)庫文件
db, err := sql.Open(dbDriverName, dbname)
if checkErr(err) {
return
}
//#################
調(diào)用創(chuàng)建數(shù)據(jù)表的語句
//err = createTable(db)
//if checkErr(err) {
// return
//}
#######插入數(shù)據(jù)的方式##########
//user1 := user{
// Username: "tom",
// Age: 50,
// Job: "manager",
// Hobby: "跑步,跳繩,編程",
//}
插入數(shù)據(jù)的方式:
//err = insertData(db, user{"jerry", 51, "醫(yī)藥開發(fā)", "運(yùn)動(dòng),學(xué)習(xí)"})
//err = insertData(db, user1)
//if checkErr(err) {
// return
//}
//#################
//查詢所有學(xué)生數(shù)據(jù)
resall, err := queryDataAll(db)
if checkErr(err) {
return
}
fmt.Println(len(resall)) //結(jié)果中幾個(gè)學(xué)生信息的長度
fmt.Println("======查詢?nèi)繑?shù)據(jù)的結(jié)果===========")
for _, val := range resall {
fmt.Println(val)
}
/*
查詢結(jié)果:
======查詢?nèi)繑?shù)據(jù)的結(jié)果===========
{tom 50 manager 跑步,跳繩,編程}
{jerry 51 醫(yī)藥開發(fā) 運(yùn)動(dòng),學(xué)習(xí)}
{tom 50 manager 跑步,跳繩,編程}
=======過濾條件的查詢=========
*/
fmt.Println("=======過濾條件的查詢=========")
//查詢帶有過濾條件的數(shù)據(jù)
resnames, err := queryData(db, "tom")
if checkErr(err) {
return
}
fmt.Println(len(resnames)) //結(jié)果中幾個(gè)學(xué)生信息的長度
fmt.Println("=======過濾名字的結(jié)果:==========")
for _, val := range resnames {
fmt.Println(val)
}
/*
=======過濾名字的結(jié)果:==========
{tom 50 manager 跑步,跳繩,編程}
{tom 50 manager 跑步,跳繩,編程}
*/
//#####刪除指定的id的編號(hào)############
//r, err := delByID(db, 1)
//if checkErr(err) {
// return
//}
//if r {
// fmt.Println("刪除數(shù)據(jù)成功!")
// //fmt.Println("delete row success")
//}
//########更新數(shù)據(jù)#########
//更新數(shù)據(jù)內(nèi)容信息
//創(chuàng)建一個(gè)更新對(duì)象
useredit := user{
Username: "tomupdate",
Age: 49,
Job: "manager--pm",
Hobby: "跑步,跳繩,編程",
}
b, err := editdata(db, useredit, 2)
if checkErr(err) {
return
}
if b {
fmt.Println("更新數(shù)據(jù)成功")
}
//#################
//#################
}
原文鏈接:https://blog.csdn.net/wtt234/article/details/124508473
相關(guān)推薦
- 2022-04-14 Python之OptionParser模塊使用詳解_python
- 2022-10-06 Redis中鍵和數(shù)據(jù)庫通用指令詳解_Redis
- 2022-05-20 Spring Boot 整合流程引擎 Flowable,so easy
- 2022-03-30 Android實(shí)現(xiàn)靜音檢測(cè)功能_Android
- 2023-02-18 Nginx中Location配置超詳細(xì)講解_nginx
- 2022-04-21 Python?數(shù)據(jù)類型--集合set_python
- 2022-12-27 Swift?Error重構(gòu)優(yōu)化詳解_Swift
- 2022-03-27 Android顯示富文本+夜間深色模式_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支