微信PK10平台开发Go实战--go语言操作sqlite数据库

生命不止,继续 go go go !!!微信PK10平台开发

继续与大家分享,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)
1
需要提供两个参数,一个driverName,一个数据库的名。

Prepare

func (db DB) Prepare(query string) (Stmt, error)
1
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)
1
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)

}
1
2
3
4
5
6
7
8
9
10
11
12
13
Query

func (s Stmt) Query(args ...interface{}) (Rows, error)
1
查询,返回的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
1
Next prepares the next result row for reading with the Scan method

func (rs *Rows) Scan(dest ...interface{}) error
1
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
1
下面要开始我们的实战了!!!!

创建数据库,创建表

//打开数据库,如果不存在,则创建
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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
新建一个数据库叫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)

1
2
3
4
5
显示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"
1
2
3
当导入一个包时,该包下的文件里所有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)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

原文地址:http://blog.51cto.com/13944797/2165939

时间: 2024-11-08 14:51:44

微信PK10平台开发Go实战--go语言操作sqlite数据库的相关文章

微信PK10平台开发与用python爬取微信公众号文章

本文通过微信提供微信PK10平台开发[q-21528-76294] 网址diguaym.com 的公众号文章调用接口,实现爬取公众号文章的功能.注意事项 1.需要安装python selenium模块包,通过selenium中的webdriver驱动浏览器获取Cookie的方法.来达到登录的效果: 2.使用webdriver功能需要安装对应浏览器的驱动插件,我这里测试用的是谷歌浏览器: google chrome版本为52.0.2743.6 ; chromedriver版本为:V2.23 注意:

第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众平台开发实战之请求消息,响应消息以及事件消息类的封装 首先,我们看看原来写的dopost方法: /** * 处理微信服务器发来的消息 */ public void doPost(HttpServletRequest request, HttpServletResponse response) thr

第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 本次的内容: 实现:分享到朋友圈,qq,qq空间,微信朋友的功能. 基础接口 判断当前客户端版本是否支持指定JS接口 wx.checkJsApi({ jsApiList: ['chooseImage'], // 需要检测的JS接

微信公众平台开发教程--方培工作室,PHP语言版本

准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消息类型解析; 5.微信公众平台开发模式原理; 6.快速开发天气预报功能. 入门教程是下面所有教程的基础. 基础接口 微信公众平台开发(2) 天气预报 介绍了使用中国天气网气象数据,实现微信上的天气预报功能. 微信公众平台开发(3) 中英翻译 介绍了使用有道翻译的接口,在微信公众平台上,开发中英互译的

微信公众平台开发入门教程(PHP从入门到精通)

微信,我的入门之路 主要针对大学生,像我一样曾经迷惘的人 务必看第三章个人体会,会很有用 这一个月的学习经验分享 最后第三章我学习php的入门经验 本人是一个大三的学生,眼看明年就要毕业了.要学点什么?就接触了微信公众号.下面是我开学到现在一个月的学习成果,也是我的入门的经验了吧.(以前我是学习硬件的,这一个月也是摸索到现在.下面是我的入门之路,及遇到问题,我解决问题的经验和技巧吧,希望能帮到那些像我一样的人,也希望和那些人一起成长.)开始吧: 在这篇微信公众平台开发教程中,我们假定你已经有了P

微信公众平台开发问答

微信公众平台开发问答是一个微信知识问答区,专注于提供微信应用及开发技术知识的整理.归类和检索. 主题:新手常见问题 问:我是新手,没有开发基础,应该如何学习微信公众平台的开发?答:先学习PHP和Mysql,可以在网上找相应的教程,也可参考书籍<PHP和MySQL Web开发(原书第4版)>:再学习微信公众平台开发入门教程,了解微信收发消息原理及回复:然后根据微信开发文档,熟悉接口,并在此基础上实现一些基本的小功能,并扩展到更复杂的功能上. 问:URL和Token是什么意思?有什么用?我应该如何

微信公众平台开发

关于微信公众平台确实是个很好的东西,鉴于需要完成这样一个作业花了2天时间来研究这个,做出了一个简单的东西. 我们选择的语言是JAVA(当然PHP开发这个更简单,不过我没学,考虑时间成本而继续用自己熟悉的),所用的服务器是SAE(BAE也可以),以及一个微信公众平台测试账号.http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,点击此处进入,用自己的微信扫描二维码就可以申请到一个测试号,高级接口都可以使用,仅仅用来测试是没有任何

微信公众平台开发(89) 高级群发接口

在这篇微信公众平台高级接口开发教程中,我们将介绍如何开发高级群发接口功能. 本文分为以下四个部分: 准备群发内容 选择群发对象 执行群发 接收群发结果 一.准备群发内容 群发内容可以是文本.图片.语音.视频.图文.群发文本只需要文本内容,其他内容需要获得相应的media_id. 1. 文本内容 文本内容就是一段文字,比如:"微信公众平台开发最佳实践" 2. 图片.语音.视频 要求如下: ? 图片(image): 128K,支持JPG格式 ? 语音(voice):256K,播放长度不超过

微信公众平台开发(86) 获取用户基本信息

本文介绍在微信公众平台上如何使用高级接口开发获取用户基本信息的功能. 一.获取用户基本信息接口 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称.头像.性别.所在城市.语言和关注时间. 获取用户基本信息 开发者可通过OpenID来获取用户基本信息.请使用https协议. 接口调用请求说明 http请求方式: GE