File tree Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ import (
4
+ "database/sql"
5
+ "database/sql/driver"
6
+ "encoding/json"
7
+ "fmt"
8
+ _ "github.com/mattn/go-sqlite3"
9
+ "log"
10
+ "os"
11
+ )
12
+
13
+ type Tag struct {
14
+ Name string `json:"name"`
15
+ Country string `json:"country"`
16
+ }
17
+
18
+ func (t * Tag ) Scan (value interface {}) error {
19
+ return json .Unmarshal ([]byte (value .(string )), t )
20
+ }
21
+
22
+ func (t * Tag ) Value () (driver.Value , error ) {
23
+ b , err := json .Marshal (t )
24
+ return string (b ), err
25
+ }
26
+
27
+ func main () {
28
+ os .Remove ("./foo.db" )
29
+
30
+ db , err := sql .Open ("sqlite3" , "./foo.db" )
31
+ if err != nil {
32
+ log .Fatal (err )
33
+ }
34
+ defer db .Close ()
35
+
36
+ _ , err = db .Exec (`create table foo (tag jsonb)` )
37
+ if err != nil {
38
+ log .Fatal (err )
39
+ }
40
+
41
+ stmt , err := db .Prepare ("insert into foo(tag) values(?)" )
42
+ if err != nil {
43
+ log .Fatal (err )
44
+ }
45
+ defer stmt .Close ()
46
+ _ , err = stmt .Exec (`{"name": "mattn", "country": "japan"}` )
47
+ if err != nil {
48
+ log .Fatal (err )
49
+ }
50
+ _ , err = stmt .Exec (`{"name": "michael", "country": "usa"}` )
51
+ if err != nil {
52
+ log .Fatal (err )
53
+ }
54
+
55
+ var country string
56
+ err = db .QueryRow ("select tag->>'country' from foo where tag->>'name' = 'mattn'" ).Scan (& country )
57
+ if err != nil {
58
+ log .Fatal (err )
59
+ }
60
+ fmt .Println (country )
61
+
62
+ var tag Tag
63
+ err = db .QueryRow ("select tag from foo where tag->>'name' = 'mattn'" ).Scan (& tag )
64
+ if err != nil {
65
+ log .Fatal (err )
66
+ }
67
+
68
+ fmt .Println (tag .Name )
69
+
70
+ tag .Country = "日本"
71
+ _ , err = db .Exec (`update foo set tag = ? where tag->>'name' == 'mattn'` , & tag )
72
+ if err != nil {
73
+ log .Fatal (err )
74
+ }
75
+
76
+ err = db .QueryRow ("select tag->>'country' from foo where tag->>'name' = 'mattn'" ).Scan (& country )
77
+ if err != nil {
78
+ log .Fatal (err )
79
+ }
80
+ fmt .Println (country )
81
+ }
You can’t perform that action at this time.
0 commit comments