-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Copy pathexample_client_test.go
110 lines (97 loc) · 2.85 KB
/
example_client_test.go
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package client_test
import (
"fmt"
"github.com/go-mysql-org/go-mysql/client"
"github.com/go-mysql-org/go-mysql/mysql"
)
func Example() {
// Connect MySQL at 127.0.0.1:3306, with user root, an empty password and database test
conn, err := client.Connect("127.0.0.1:3306", "root", "", "test")
// Or to use SSL/TLS connection if MySQL server supports TLS
// conn, err := client.Connect("127.0.0.1:3306", "root", "", "test", func(c *Conn) {c.UseSSL(true)})
// Or to set your own client-side certificates for identity verification for security
// tlsConfig := NewClientTLSConfig(caPem, certPem, keyPem, false, "your-server-name")
// conn, err := client.Connect("127.0.0.1:3306", "root", "", "test", func(c *Conn) {c.SetTLSConfig(tlsConfig)})
if err != nil {
msg := fmt.Sprintf(`
This example needs a MySQL listening on 127.0.0.1:3006 with user "root" and
empty password. Please check the connectivity using mysql client.
---
Connect to MySQL failed: %v`, err)
panic(msg)
}
err = conn.Ping()
if err != nil {
panic(err)
}
// (re)create the t1 table
r, err := conn.Execute(`DROP TABLE IF EXISTS t1`)
if err != nil {
panic(err)
}
r.Close()
r, err = conn.Execute(`CREATE TABLE t1 (id int PRIMARY KEY, name varchar(255))`)
if err != nil {
panic(err)
}
r.Close()
// Insert
r, err = conn.Execute(`INSERT INTO t1(id, name) VALUES(1, "abc"),(2, "def")`)
if err != nil {
panic(err)
}
defer r.Close()
// Get last insert id and number of affected rows
fmt.Printf("InsertId: %d, AffectedRows: %d\n", r.InsertId, r.AffectedRows)
// Select
r, err = conn.Execute(`SELECT id, name FROM t1`)
if err != nil {
panic(err)
}
// Handle resultset
v, err := r.GetInt(0, 0)
if err != nil {
panic(err)
}
fmt.Printf("Value of Row 0, Column 0: %d\n", v)
v, err = r.GetIntByName(0, "id")
if err != nil {
panic(err)
}
fmt.Printf("Value of Row 0, Column 'id': %d\n", v)
// Direct access to fields
for rownum, row := range r.Values {
fmt.Printf("Row number %d\n", rownum)
for colnum, val := range row {
fmt.Printf("\tColumn number %d\n", colnum)
ival := val.Value() // interface{}
fmt.Printf("\t\tvalue (type: %d): %#v\n", val.Type, ival)
if val.Type == mysql.FieldValueTypeSigned {
fval := val.AsInt64()
fmt.Printf("\t\tint64 value: %d\n", fval)
}
if val.Type == mysql.FieldValueTypeString {
fval := val.AsString()
fmt.Printf("\t\tstring value: %s\n", fval)
}
}
}
// Output:
// InsertId: 0, AffectedRows: 2
// Value of Row 0, Column 0: 1
// Value of Row 0, Column 'id': 1
// Row number 0
// Column number 0
// value (type: 2): 1
// int64 value: 1
// Column number 1
// value (type: 4): []byte{0x61, 0x62, 0x63}
// string value: abc
// Row number 1
// Column number 0
// value (type: 2): 2
// int64 value: 2
// Column number 1
// value (type: 4): []byte{0x64, 0x65, 0x66}
// string value: def
}