博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go公链实战0x02boltdb数据库
阅读量:6037 次
发布时间:2019-06-20

本文共 1861 字,大约阅读时间需要 6 分钟。

我们知道,bitcoin客户端的区块信息是存储在LevelDB数据库中。我们既然要基于go开发公链,这里用到的数据库是基于go的。

安装

使用go get

$ go get github.com/boltdb/boltd / ...复制代码

安装成功后,我们会在go目录下看到:

基本使用

创建并打开数据库

注意:在这里gland直接运行,生成的my.db在main.go上层目录;命令行build在运行的话是当前目录!!!

//1.数据库创建	//在这里gland直接运行,生成的my.db在main.go上层目录;命令行build在运行的话是当前目录!!!	db, err := bolt.Open("chaorsBlock.db", 0600, nil)	if err != nil {		log.Fatal(err)	}	defer db.Close()复制代码

在你打开之后,你有两种处理它的方式:读-写和只读操作,读-写方式开始于db.Update方法,常用于建表和表中插入新数据;只读操作开始于db.View方法,常用于表数据的查询。

创建新表
//2.创建表	err = db.Update(func(tx *bolt.Tx) error {                  //判断要创建的表是否存在		b := tx.Bucket([]byte("MyBlocks"))		if b == nil {            		//创建叫"MyBucket"的表			_, err := tx.CreateBucket([]byte("MyBlocks"))			if err != nil {                                //也可以在这里对表做插入操作				log.Fatal(err)			}		}		//一定要返回nil		return nil	})	//更新数据库失败	if err != nil {		log.Fatal(err)	}复制代码
更新表内容
//3.更新表数据	err = db.Update(func(tx *bolt.Tx) error {		//取出叫"MyBucket"的表		b := tx.Bucket([]byte("MyBlocks"))		//往表里面存储数据		if b != nil {                        //插入的键值对数据类型必须是字节数组			err := b.Put([]byte("l"), []byte("0x0000"))			err := b.Put([]byte("ll"), []byte("0x0001"))                        err := b.Put([]byte("lll"), []byte("0x0002"))			if err != nil {				log.Fatal(err)			}		}		//一定要返回nil		return nil	})	//更新数据库失败	if err != nil {		log.Fatal(err)	}复制代码
表查询
//4.查看表数据	err = db.View(func(tx *bolt.Tx) error {		//取出叫"MyBucket"的表		b := tx.Bucket([]byte("MyBlocks"))		//往表里面存储数据		if b != nil {			data := b.Get([]byte("l"))			fmt.Printf("%s\n", data)			data := b.Get([]byte("l"))			fmt.Printf("%s\n", data)		}		//一定要返回nil		return nil	})	//查询数据库失败	if err != nil {		log.Fatal(err)	}复制代码

boltdb基本使用就先学到这,搭建公链用数据库存储区块大概也只用到这么多,以后具体涉及到boltdb其他知识再针对性学习就好。

在这,喜欢的朋友记得给个小star,或者fork.也欢迎大家一起探讨区块链相关知识,一起进步!

更多原创区块链技术文章请访问

. . . .

###互联网颠覆世界,区块链颠覆互联网!

---------------------------------------------20180623 19:06

转载地址:http://zilhx.baihongyu.com/

你可能感兴趣的文章
C/C++二进制读写png文件
查看>>
thymleaf 常用th 标签
查看>>
RTB 广告系统
查看>>
Linux signal 那些事儿(2)【转】
查看>>
InfluxDB安装及配置
查看>>
Dynamics CRM Microsoft SQL Server 指定的数据库具有更高的版本号
查看>>
PAT Perfect Sequence (25)
查看>>
java.exe进程来源排查录
查看>>
点滴记录——Ubuntu 14.04中Solr与Tomcat整合安装
查看>>
C++实现KMP模式匹配算法
查看>>
ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
查看>>
记录锁
查看>>
JSONObject与JSONArray的使用
查看>>
[SQL Server] 数据库日志文件自动增长导致连接超时的分析
查看>>
【常见Web应用安全问题】---6、Script source code disclosure
查看>>
<html:form>标签
查看>>
除了《一无所有》,我一无所有
查看>>
每日英语:China Seeks to Calm Anxiety Over Rice
查看>>
C++中struct和class的区别 [转]
查看>>
C++ ofstream和ifstream详细用法
查看>>