Golang与mysql的json数据互通

程序

package main

import (
	"database/sql"
	"encoding/json"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

type Book struct {
	id       int
	category Category
	tags     []int
}

type Category struct {
	Id   int
	Name string
}

func main() {
	db, _ := sql.Open("mysql", "root:123@/xty")
	rows, _ := db.Query("select category,tags from book where id=?", 2)
	columnTypes, _ := rows.ColumnTypes()      //根据列分类 存储进一个[]ColumnTypes中
	str1 := columnTypes[0].DatabaseTypeName() //第一列在数据库对应的数据类型
	name1 := columnTypes[0].Name()            //第一列的名称
	str2 := columnTypes[1].DatabaseTypeName() //第二列在数据库对应的数据类型
	name2 := columnTypes[1].Name()            //第二列的名称
	fmt.Println(str1, str2)
	fmt.Println(name1, name2)
	type1 := columnTypes[0].ScanType() //在go中所对应的类型
	type2 := columnTypes[1].ScanType()
	fmt.Println(type1, type2)
	var book Book
	var ( //使用sql.RawBytes来接收数据库中查询出来的json数据
		category sql.RawBytes
		tags     sql.RawBytes
	)
	for rows.Next() {
		rows.Scan(&category, &tags)
	}
	json.Unmarshal(category, &book.category)   
	json.Unmarshal(tags, &book.tags)

	fmt.Println(book)
	c := Category{Id: 9, Name: "sword coming"}
	t := []int{1, 2, 3, 4, 5, 6, 7}
	c2j, err := json.Marshal(c)
	t2j, err := json.Marshal(t)
	res, err := db.Exec("insert into book(id,category,tags) values(?,?,?)", 4, c2j, t2j)
	if err != nil {
		panic(err)
	}
	fmt.Println(res.LastInsertId())
}

结果

JSON JSON
category tags
sql.RawBytes sql.RawBytes
{0 {2 walk in the daynight} [4 5 6]}
4 <nil>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值