生命不止,继续 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)相关推荐

  1. pq和mysql_Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)

    生命不止,继续 Go go go !!! 之前关于golang操作数据库的博客: 今天跟大家分享golang中使用PostgreSQL数据库. 何为PostgreSQL PostgreSQL is a ...

  2. Android学习笔记---Android利用Sqlite,并且用sql语言操作SQLite数据库

    6.对数据库进行操作:   一下是对数据库的操作代码,包括添加,删除,更新,查询,和分页,统计 ---------------------------------------------------- ...

  3. psql+加载mysql数据库_Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)

    生命不止,继续 Go go go !!! 之前关于golang操作数据库的博客: 今天跟大家分享golang中使用PostgreSQL数据库. 何为PostgreSQL PostgreSQL is a ...

  4. Linux C语言操作SQLite数据库

    1. SQLite数据库特点 (1)SQLite数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它. (2)事务的处理是原子的,一致的 ...

  5. C语言操作SQLite

    1 下载源代码 采用C语言操作SQLite数据库时需要引入sqlite3库,我们可以在官网下载源代码后编译. 2 C代码-不用回调函数执行SQL语句 #include <stdio.h> ...

  6. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  7. go语言mysql操作_使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...

  8. java mysql nclob_java语言操作Oracle数据库中的CLOB数据类型 (转)

    java语言操作Oracle数据库中的CLOB数据类型 (转)[@more@] 有关字段类型的相关信息可以查阅oracle技术网.下面摘抄一些有关blob.clob等类型的说明.又便于大家的了解. 字 ...

  9. 用C语言操作MySQL数据库-通用版

    用C语言操作MySQL数据库 先看结构体: 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接. typedef struc ...

最新文章

  1. 利用Use Case为系统行为建模(3)
  2. pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号
  3. IOS 非常流畅的滑动tableView
  4. Makefile 里的 subst 函数
  5. Mac下如何显示隐藏文件/文件夹
  6. RabbitMQ管理(1)——多租户与权限
  7. java实现简易聊天窗口先运行服务器还是客户端_一个简易聊天功能的服务器端和客户端源码...
  8. C#黔驴技巧之去重(Distinct)
  9. 国家生物信息中心在核酸研究发表单细胞DNA甲基化数据库—scMethBank
  10. 前端性能测试--启动时间监控数值获取方法
  11. C语言把文件空格删去,关于文件操作,碰到空格就换行
  12. mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南
  13. 使得电脑成为通用计算机器,为什么电脑显示器变成通用非即插即用监视器?
  14. 车间图纸管理软件-车间无纸化管理解决方案
  15. 专访Barefoot:被Intel收购后的五倍爆发力
  16. 用阿里云建站模版套餐云速成美站有没有可能不容易被seo抓取排名?
  17. Android 手机模拟游戏手柄(USB,C#,winio)
  18. Linux内核版本说明
  19. jquery/js实现一个网页同时调用多个倒计时(最新的)
  20. python搭建简单本地服务器

热门文章

  1. WCF测试工具,post经验
  2. 未来通信设备的体系构架
  3. Python稳基修炼的经典案例4(计算机二级、初学者必须掌握的例题)
  4. php 写入套节字,php – 写入套接字并处理损坏的管道
  5. python中key_python属性和key的区别?
  6. 董付国老师Python系列教材推荐与选用参考
  7. xssfworkbook excel打开为空白_「Excel」轻松运用 Excel 之“Excel 选项”的 4 个设置
  8. java 安卓 html文件怎么打开方式_android 浏览器 打开本地html文件的方法
  9. rbw数字信号处理_数字信号处理与模拟IC设计
  10. python 文本框内容变化_监听文本输入框内容值的改变——4种方法