go mysql stmt exec_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

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())

}

}

数据表结构如下所示:

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")

源代码如下所示:

// 支持多种驱动加载 ,当前程序中加载驱动为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.感想

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

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值