go公链实战0x02boltdb数据库

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

安装

使用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.也欢迎大家一起探讨区块链相关知识,一起进步!

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

. . . .

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

---------------------------------------------20180623 19:06
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值