-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtab2sql.go
109 lines (102 loc) · 2.27 KB
/
tab2sql.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
package main
import (
"bufio"
"bytes"
"database/sql"
"fmt"
"os"
_ "github.com/go-sql-driver/mysql"
)
var myDB *sql.DB
type Hostinfo struct {
DBUser,
DBPassword,
DBname,
DBHost,
DBPort,
DBChar string
}
func connMysql(host *Hostinfo) (*sql.DB, error) {
if host.DBHost != "" {
host.DBHost = "tcp(" + host.DBHost + ":" + host.DBPort + ")"
}
db, err := sql.Open("mysql", host.DBUser+":"+host.DBPassword+"@"+host.DBHost+"/"+host.DBname+"?charset="+host.DBChar)
return db, err
}
func SetDB(ip string) (myDB *sql.DB) {
var server_info Hostinfo
server_info.DBUser = "xxx"
server_info.DBPassword = "xxx"
server_info.DBname = "test"
server_info.DBHost = ip
server_info.DBPort = "xxx"
server_info.DBChar = "utf8"
myDB, _ = connMysql(&server_info)
return myDB
}
func tab2txt(ip string) {
myDB = SetDB(ip)
defer myDB.Close()
rows, err := myDB.Query("select * from xxx.xxx")
defer rows.Close()
if err != nil {
fmt.Println(err.Error())
}
tsql := bytes.Buffer{}
columns, err := rows.Columns()
if err != nil {
fmt.Println(err.Error())
}
values := make([]sql.RawBytes, len(columns))
scanArgs := make([]interface{}, len(values))
for i := range values {
scanArgs[i] = &values[i]
}
for rows.Next() {
tsql.WriteString("insert into xxx.xxx (")
for i, column := range columns {
if i != len(columns)-1 {
tsql.WriteString(column + ",")
} else {
tsql.WriteString(column)
}
}
tsql.WriteString(") values ")
err = rows.Scan(scanArgs...)
if err != nil {
fmt.Println(err.Error())
}
tsql.WriteString("(")
var value string
for i, col := range values {
if col == nil {
value = "NULL"
} else {
value = string(col)
}
if i != len(columns)-1 {
tsql.WriteString("'" + value + "'" + ",")
} else {
tsql.WriteString("'" + value + "'")
}
}
tsql.WriteString(");\n")
}
if err = rows.Err(); err != nil {
fmt.Println(err.Error())
}
outputFile, outputError := os.OpenFile("output.txt", os.O_WRONLY|os.O_CREATE, 0666)
if outputError != nil {
fmt.Printf("An error occurred with file opening or creation\n")
return
}
defer outputFile.Close()
outputWriter := bufio.NewWriter(outputFile)
outputString := tsql.String()
outputWriter.WriteString(outputString)
outputWriter.Flush()
}
func main() {
from_ip := "xxx"
tab2txt(from_ip)
}