go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)

2023-05-16

生命不止,继续 go go go !!!

继续与大家分享,go语言的实战,今天介绍的是如何操作sqlite数据库。

何为sqlite3?

SQLite is a self-contained, high-reliability, embedded, full-featured, public-domain, SQL database engine.

最主要的是,sqlite是一款轻型的数据库

database/sql包

go中有一个database/sql package,我们看看是怎样描述的:

Package sql provides a generic interface around SQL (or SQL-like) databases.

The sql package must be used in conjunction with a database driver

很清晰吧,需要我们自己提供一个database driver。当然,我们可以在github上找到相关的sqlite3的driver,稍后介绍。

下面介绍接个数据相关的操作:

Open

func Open(driverName, dataSourceName string) (*DB, error)

需要提供两个参数,一个driverName,一个数据库的名。

Prepare

func (db *DB) Prepare(query string) (*Stmt, error)

Prepare creates a prepared statement for later queries or executions.

返回的 *Stmt是什么鬼?

Stmt

Stmt is a prepared statement. A Stmt is safe for concurrent use by multiple goroutines.

func (*Stmt) Exec

准备完成后,就要执行了。

func (s *Stmt) Exec(args ...interface{}) (Result, error)

Exec executes a prepared statement with the given arguments and returns a Result summarizing the effect of the statement.

返回的Resault是什么鬼?

Result

type Result interface {

// LastInsertId returns the integer generated by the database

// in response to a command. Typically this will be from an

// "auto increment" column when inserting a new row. Not all

// databases support this feature, and the syntax of such

// statements varies.

LastInsertId() (int64, error)

// RowsAffected returns the number of rows affected by an

// update, insert, or delete. Not every database or database

// driver may support this.

RowsAffected() (int64, error)

}

Query

func (s *Stmt) Query(args ...interface{}) (*Rows, error)

查询,返回的Rows是什么鬼?

Rows

Rows is the result of a query. Its cursor starts before the first row of the result set.

func (rs *Rows) Next() bool

Next prepares the next result row for reading with the Scan method

func (rs *Rows) Scan(dest ...interface{}) error

Scan copies the columns in the current row into the values pointed at by dest.

介绍少不多了,下面介绍一个sqlite3的Driver:

mattn/go-sqlite3

sqlite3 driver for go that using database/sql

github地址:

https://github.com/mattn/go-sqlite3

执行:

go get -u github.com/mattn/go-sqlite3

下面要开始我们的实战了!!!!

创建数据库,创建表

//打开数据库,如果不存在,则创建

db, err := sql.Open("sqlite3", "./test.db")

checkErr(err)

//创建表

sql_table := `

CREATE TABLE IF NOT EXISTS userinfo(

uid INTEGER PRIMARY KEY AUTOINCREMENT,

username VARCHAR(64) NULL,

departname VARCHAR(64) NULL,

created DATE NULL

);

`

db.Exec(sql_table)

新建一个数据库叫test.db,并在这个数据库中建一个表,叫做userinfo。

userinfo中包含了四个字段,uid username departname created.

把uid设置为主键,并AUTOINCREMENT,自增。

插入数据

stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")

checkErr(err)

res, err := stmt.Exec("wangshubo", "国务院", "2017-04-21")

checkErr(err)

显示Prepare,然后Exec.

接下来,就不再赘述了,我们需要一个基本的sql知识。

补充:import中_的作用

官方解释:

To import a package solely for its side-effects (initialization), use the blank identifier as explicit package name:

import _ "lib/math"

当导入一个包时,该包下的文件里所有init()函数都会被执行。

然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。

最后献上全部代码:

package main

import (

"database/sql"

"fmt"

"time"

_ "github.com/mattn/go-sqlite3"

)

func main() {

//打开数据库,如果不存在,则创建

db, err := sql.Open("sqlite3", "./foo.db")

checkErr(err)

//创建表

sql_table := `

CREATE TABLE IF NOT EXISTS userinfo(

uid INTEGER PRIMARY KEY AUTOINCREMENT,

username VARCHAR(64) NULL,

departname VARCHAR(64) NULL,

created DATE NULL

);

`

db.Exec(sql_table)

// insert

stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")

checkErr(err)

res, err := stmt.Exec("wangshubo", "国务院", "2017-04-21")

checkErr(err)

id, err := res.LastInsertId()

checkErr(err)

fmt.Println(id)

// update

stmt, err = db.Prepare("update userinfo set username=? where uid=?")

checkErr(err)

res, err = stmt.Exec("wangshubo_new", id)

checkErr(err)

affect, err := res.RowsAffected()

checkErr(err)

fmt.Println(affect)

// query

rows, err := db.Query("SELECT * FROM userinfo")

checkErr(err)

var uid int

var username string

var department string

var created time.Time

for rows.Next() {

err = rows.Scan(&uid, &username, &department, &created)

checkErr(err)

fmt.Println(uid)

fmt.Println(username)

fmt.Println(department)

fmt.Println(created)

}

rows.Close()

// delete

stmt, err = db.Prepare("delete from userinfo where uid=?")

checkErr(err)

res, err = stmt.Exec(id)

checkErr(err)

affect, err = res.RowsAffected()

checkErr(err)

fmt.Println(affect)

db.Close()

}

func checkErr(err error) {

if err != nil {

panic(err)

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go) 的相关文章

随机推荐

  • 滚动视图 UIScrollView

    UIScrollView xff1a 提供可以显 示 大于应 用窗 口的内容功能的控件 用户可以通过 手势使内容滚动和缩放 从 而查 看全部内容 初始化一个UIScrollView的对象 1 UIScrollView scroll 61 U
  • 基于steam的游戏销量预测 — PART 1 — 爬取steam游戏相关数据的爬虫

    语言 xff1a python 环境 xff1a ubuntu 爬取内容 xff1a steam游戏标签 xff0c 评论 xff0c 以及在 steamspy 爬取对应游戏的销量 使用相关 xff1a urllib xff0c lxml
  • WechatHelper

    using System using System Collections Generic using System Configuration using System IO using System Linq using System
  • Go——range复用临时变量

    range复用临时变量 span class token keyword package span main span class token keyword import span span class token string 34 s
  • cf 1169 C Increasing by Modulo

    cf 1169 C Increasing by Modulo 题意 给你一个n个数字的序列 xff0c 有一个操作是选其中的一些数字来 43 1 xff0c 最后使得序列每一个数取模m后是一个非严格单调递增的序列 xff0c 问至少需要多少
  • 洛谷P1605 迷宫 题解

    洛谷P1605 迷宫 题解 题目背景 问题描述 数据规模 输入 输出 输入输出样例 输入样例 1 xff1a 输出样例 1 xff1a 题解 C 43 43 代码 题目背景 问题描述 给定一个N M方格的迷宫 xff0c 迷宫里有T处障碍
  • linux禁用nouveau grub,NVIDIA驱动安装之禁用nouveau

    最近实验室的服务器英伟达驱动重启之后就不能用了 xff0c 查明原因原来是因为Ubuntu自动升级了内核 xff0c 导致原本的驱动失效了 xff0c 所以一定不要没事干去升级内核 xff0c 下面介绍一下重装驱动的曲折之旅 0x00更改b
  • Python:使用Kivy将python程序打包为apk文件

    1 概述 Kivy是一套Python下的跨平台开源应用开发框架 xff0c 官网 xff0c 我们可以用 它来将Python程序打包为安卓的apk安装文件 以下是在windows环境中使用 安装和配置的过程中会下载很多东西 xff0c 确保
  • Ubuntu16.04进入挂起或休眠状态时按任何键都无法唤醒问题解决办法

    挂起 xff08 待机 xff09 计算机将目前的运行状态等数据存放在内存 xff0c 关闭硬盘 外设等设备 xff0c 进入等待状态 此时内存仍然需要电力维持其数据 xff0c 但整机耗电很少 恢复时计算机从内存读 出数据 xff0c 回
  • java 兔子繁殖问题_兔子繁殖问题

    兔子繁殖问题 设有一对新生的兔子 xff0c 从第三个月开始他们每个月都生一对兔子 xff0c 新生的兔子从第三个月开始又每个月生一对兔子 按此规律 xff0c 并假定兔子没有死亡 xff0c 20个月后共有多少个兔子 xff1f 要求编写
  • 尝试一下sql server2016里面的json功能

    前2天下载了一个2016的rc版本来玩一下 xff0c 首先感觉是 开发者版本免费啦 xff01 xff01 撒花 xff01 xff01 xff01 另外一个东西 sql server 2016能支持json 的解析和应用啦 xff0c
  • MPICH 3.2安装

    step 1 下载 在官网下载最新版 http www mpich org downloads step 2 解压安装 tar zxvf mpich 3 2 tar gz step 3 进入mpich 3 2 文件夹 xff0c 并配置安装
  • WEB网站无法打开某种格式资源的解决办法

    近日 xff0c 在发布网站的时候发现了一个问题 大致情况描述为 xff1a 网站中所有的文件类型的附件存放在同一个文件夹下 xff0c 可是在页面上 xff0c doc格式 tiff格式的文件都可以正常打开 xff0c 唯独ceb格式的文
  • Go——defer陷阱

    defer陷阱 defer带来了两个副作用 xff1a 对返回值的影响对性能的影响 defer和函数返回值 defr中如果引用了函数的返回值 xff0c 则因引用形式不同会导致不同的结果 xff0c 这些结果往往给初学者造成很大的困惑 xf
  • fcitx更新 home:csslayer的源 KDE下CTRL+SPACE不能调出输入法界面解决

    今天突然发现不能用CTRL 43 SPACE调用输入法界面了 用鼠标点击是可以用的 查了查各种 xff0c 基本都集中在某些包和环境变量上 xff0c 但是显然不是我这种情况 怀疑是快捷键冲突 xff0c 但是去更改配置文件似乎没什么用 想
  • [IOS][已越狱]配合网易云音乐,使用Bridge快速免iTunes导入音乐到“音乐”

    前置 xff1a 已越狱IOS设备 工具表 xff1a Bridge bigboss源 xff0c 可以使用cydown以非官方服务器下载安装 网易云音乐 Appstore Filza 很多源都有 网易云试听缓存路径 xff1a var m
  • linux解压显示信息,Linux中常见的压缩与解压缩方法

    zip xff1a 可以压缩多个文件或者目录 xff0c 压缩后保留原始文件或者目录 xff0c 后缀为 zip yum y install zip 选项 xff1a r xff1a 压缩目录 q xff1a 静默模式 xff0c 执行时不
  • 【信息学奥赛一本通 提高组】第二章 二分与三分

    一 二分 二分法 xff0c 在一个单调有序的集合或函数中查找一个解 xff0c 每次分为左右两部分 xff0c 判断解在那个部分并调整上下界 xff0c 直到找到目标元素 xff0c 每次二分都将舍弃一般的查找空间 xff0c 因此效率很
  • debian服务器网络性能测试,使用 cURL 对Web请求进行性能测试

    在做 Web 开发的时候 xff0c 经常需要对 Web Page 或者 REST ful API 做简单的 Benchmark 本文将介绍如何使用 cURL 进行简单快速的性能评测 本文内容分为以下两部分 xff1a 使用 curl 查看
  • go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)

    生命不止 xff0c 继续 go go go 继续与大家分享 xff0c go语言的实战 xff0c 今天介绍的是如何操作sqlite数据库 何为sqlite3 xff1f SQLite is a self contained high r