網站首頁 編程語言 正文
需要下載sqlite3環境:
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
}
//封裝一個處理error的函數,處理程序中的 err,
//有err的地方直接調用這個函數就可以了
func checkErr(e error) bool {
if e != nil {
log.Fatal(e)
return true
}
return false
}
//創建數據表的函數
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
}
//########插入數據#########
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
}
//#########查詢數據并且返回切片列表########
//查詢所有數據
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
}
//查詢帶有條件的數據函數
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
}
//########刪除數據#########
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
}
//#################
//######主函數###########
func main() {
//初始sqlite3數據庫文件
db, err := sql.Open(dbDriverName, dbname)
if checkErr(err) {
return
}
//#################
調用創建數據表的語句
//err = createTable(db)
//if checkErr(err) {
// return
//}
#######插入數據的方式##########
//user1 := user{
// Username: "tom",
// Age: 50,
// Job: "manager",
// Hobby: "跑步,跳繩,編程",
//}
插入數據的方式:
//err = insertData(db, user{"jerry", 51, "醫藥開發", "運動,學習"})
//err = insertData(db, user1)
//if checkErr(err) {
// return
//}
//#################
//查詢所有學生數據
resall, err := queryDataAll(db)
if checkErr(err) {
return
}
fmt.Println(len(resall)) //結果中幾個學生信息的長度
fmt.Println("======查詢全部數據的結果===========")
for _, val := range resall {
fmt.Println(val)
}
/*
查詢結果:
======查詢全部數據的結果===========
{tom 50 manager 跑步,跳繩,編程}
{jerry 51 醫藥開發 運動,學習}
{tom 50 manager 跑步,跳繩,編程}
=======過濾條件的查詢=========
*/
fmt.Println("=======過濾條件的查詢=========")
//查詢帶有過濾條件的數據
resnames, err := queryData(db, "tom")
if checkErr(err) {
return
}
fmt.Println(len(resnames)) //結果中幾個學生信息的長度
fmt.Println("=======過濾名字的結果:==========")
for _, val := range resnames {
fmt.Println(val)
}
/*
=======過濾名字的結果:==========
{tom 50 manager 跑步,跳繩,編程}
{tom 50 manager 跑步,跳繩,編程}
*/
//#####刪除指定的id的編號############
//r, err := delByID(db, 1)
//if checkErr(err) {
// return
//}
//if r {
// fmt.Println("刪除數據成功!")
// //fmt.Println("delete row success")
//}
//########更新數據#########
//更新數據內容信息
//創建一個更新對象
useredit := user{
Username: "tomupdate",
Age: 49,
Job: "manager--pm",
Hobby: "跑步,跳繩,編程",
}
b, err := editdata(db, useredit, 2)
if checkErr(err) {
return
}
if b {
fmt.Println("更新數據成功")
}
//#################
//#################
}
原文鏈接:https://blog.csdn.net/wtt234/article/details/124508473
相關推薦
- 2022-10-02 Go語言快速入門指針Map使用示例教程_Golang
- 2022-04-17 瀏覽器無法復制文字解決辦法
- 2022-12-04 React使用refs操作DOM方法詳解_React
- 2023-07-15 oracle查看死鎖以及處理死鎖
- 2023-07-02 如何遠程使用服務器上的Jupyter?notebook_python
- 2022-06-12 Android代碼檢查規則Lint的自定義與應用詳解_Android
- 2022-08-04 C語言實現快速排序算法實例_C 語言
- 2022-08-20 Go?多環境下配置管理方案(多種方案)_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支