Go语言操作MySQL

章节

  • 写在前面
  • go 操作 MySQL
  • 感想

1.写在前面

接下来的记录中会附带记录当日工作学习到的东西,包括且不限于 技术、软实力-沟通、心态、理财、个人思考等

2.go 操作MySQL

如Java操作数据库,编程逻辑如下:
驱动加载、获取连接(connect)、生成Statement || PrepareStatement 对象、sql传参、exec or query、获取结果集 Resultset,go 操作MySQL的步骤也是如上步骤。

注意:go 加载驱动 需要依靠远程 import 的 驱动包 github.com/go-sql-driver/mysql

如下代码所示,演示了 基础操作 CURD
DbOperate.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
package DB
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
//返回数据库连接句柄
func connDb() *sql.DB {
db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/demo?charset=utf8")
checkErr(err)
return db
}
//insert
func DoInsert(sql string) {
db := connDb()
sql = "insert into test(name) value (?)"
stmt, err := db.Prepare(sql)
checkErr(err)
res, err := stmt.Exec("bofengliu")
checkErr(err)
fmt.Printf("成功了,%v", res)
}
//delete
func DoDelete(id int) {
db := connDb()
sql := "delete from test where id = ?"
stmt, err := db.Prepare(sql)
checkErr(err)
res, err := stmt.Exec(id)
checkErr(err)
res = nil
fmt.Println(res)
}
//update
func DoUpdate(name string, id int) int64 {
db := connDb()
sql := "update test set name = ? where id = ?"
stmt, err := db.Prepare(sql)
checkErr(err)
res, err := stmt.Exec(name, id)
checkErr(err)
affect, err := res.RowsAffected()
fmt.Println("影响数据集行数为", affect)
return affect
}
func DoQueryByName(name string) {
sql := "select * from test where name = \"" + name + "\""
db := connDb()
res, err := db.Query(sql)
checkErr(err)
for res.Next() {
var id int
var name string
err := res.Scan(&id, &name)
checkErr(err)
fmt.Println(id)
fmt.Println(name)
}
}
func checkErr(err error) {
if err != nil {
panic(err.Error())
}
}

数据表结构如下所示:

1
2
3
4
5
6
7
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 |

上述代码中通过import 引入了 github.com/go-sql-driver/mysql,注意前方有 _ ,此代表 引入的远程包 不会在代码中直接使用,而是被程序间接加载,加载位置为 db, err := sql.Open(“mysql”, “root:@tcp(127.0.0.1:3306)/demo?charset=utf8”)

源代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 支持多种驱动加载 ,当前程序中加载驱动为MySQL 驱动
func Open(driverName, dataSourceName string) (*DB, error) {
driversMu.RLock()
driveri, ok := drivers[driverName]
driversMu.RUnlock()
if !ok {
return nil, fmt.Errorf("sql: unknown driver %q (forgotten import?)", driverName)
}
if driverCtx, ok := driveri.(driver.DriverContext); ok {
connector, err := driverCtx.OpenConnector(dataSourceName)
if err != nil {
return nil, err
}
return OpenDB(connector), nil
}
return OpenDB(dsnConnector{dsn: dataSourceName, driver: driveri}), nil
}

经测试 没有问题,此为go 操作 MySQL 初体验。

3.感想

基础要牢靠,越是简单的东西,越需要记录。

完。

鱼大坤 wechat
个人微信号,欢迎添加~
如果我的文章对您有帮助,请小小的打赏一下吧~,我将>创作更好的文章给大家!谢谢!