go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)
生命不止,继续 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)
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
go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)相关推荐
- pq和mysql_Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)
生命不止,继续 Go go go !!! 之前关于golang操作数据库的博客: 今天跟大家分享golang中使用PostgreSQL数据库. 何为PostgreSQL PostgreSQL is a ...
- Android学习笔记---Android利用Sqlite,并且用sql语言操作SQLite数据库
6.对数据库进行操作: 一下是对数据库的操作代码,包括添加,删除,更新,查询,和分页,统计 ---------------------------------------------------- ...
- psql+加载mysql数据库_Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)
生命不止,继续 Go go go !!! 之前关于golang操作数据库的博客: 今天跟大家分享golang中使用PostgreSQL数据库. 何为PostgreSQL PostgreSQL is a ...
- Linux C语言操作SQLite数据库
1. SQLite数据库特点 (1)SQLite数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它. (2)事务的处理是原子的,一致的 ...
- C语言操作SQLite
1 下载源代码 采用C语言操作SQLite数据库时需要引入sqlite3库,我们可以在官网下载源代码后编译. 2 C代码-不用回调函数执行SQL语句 #include <stdio.h> ...
- c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...
这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...
- go语言mysql操作_使用Go语言操作MySQL数据库的思路与步骤
最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...
- java mysql nclob_java语言操作Oracle数据库中的CLOB数据类型 (转)
java语言操作Oracle数据库中的CLOB数据类型 (转)[@more@] 有关字段类型的相关信息可以查阅oracle技术网.下面摘抄一些有关blob.clob等类型的说明.又便于大家的了解. 字 ...
- 用C语言操作MySQL数据库-通用版
用C语言操作MySQL数据库 先看结构体: 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接. typedef struc ...
最新文章
- 利用Use Case为系统行为建模(3)
- pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号
- IOS 非常流畅的滑动tableView
- Makefile 里的 subst 函数
- Mac下如何显示隐藏文件/文件夹
- RabbitMQ管理(1)——多租户与权限
- java实现简易聊天窗口先运行服务器还是客户端_一个简易聊天功能的服务器端和客户端源码...
- C#黔驴技巧之去重(Distinct)
- 国家生物信息中心在核酸研究发表单细胞DNA甲基化数据库—scMethBank
- 前端性能测试--启动时间监控数值获取方法
- C语言把文件空格删去,关于文件操作,碰到空格就换行
- mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南
- 使得电脑成为通用计算机器,为什么电脑显示器变成通用非即插即用监视器?
- 车间图纸管理软件-车间无纸化管理解决方案
- 专访Barefoot:被Intel收购后的五倍爆发力
- 用阿里云建站模版套餐云速成美站有没有可能不容易被seo抓取排名?
- Android 手机模拟游戏手柄(USB,C#,winio)
- Linux内核版本说明
- jquery/js实现一个网页同时调用多个倒计时(最新的)
- python搭建简单本地服务器
热门文章
- WCF测试工具,post经验
- 未来通信设备的体系构架
- Python稳基修炼的经典案例4(计算机二级、初学者必须掌握的例题)
- php 写入套节字,php – 写入套接字并处理损坏的管道
- python中key_python属性和key的区别?
- 董付国老师Python系列教材推荐与选用参考
- xssfworkbook excel打开为空白_「Excel」轻松运用 Excel 之“Excel 选项”的 4 个设置
- java 安卓 html文件怎么打开方式_android 浏览器 打开本地html文件的方法
- rbw数字信号处理_数字信号处理与模拟IC设计
- python 文本框内容变化_监听文本输入框内容值的改变——4种方法