Golang操作Mysql

yuchuanabcd · · 1871 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. 说明

最原始的参数化SQL语句,ORM可以参考begoo

2. 安装驱动

go get github.com/go-sql-driver/mysql

3. 操作示例

package main

import (
    "fmt"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

type TestMysql struct {
    db *sql.DB
}

/* 初始化数据库引擎 */
func Init() (*TestMysql, error) {
    test := new(TestMysql);
    db, err := sql.Open("mysql", "root:yccy@/gotest");
    //第一个参数 : 数据库引擎
    //第二个参数 : 数据库DSN配置。Go中没有统一DSN,都是数据库引擎自己定义的,因此不同引擎可能配置不同
    if err != nil {
        fmt.Println("database initialize error : ", err.Error());
        return nil, err;
    }
    test.db = db;
    return test, nil;
}

/* 测试数据库数据添加 */
func (test *TestMysql)Create() {
    if test.db == nil {
        return;
    }
    stmt, err := test.db.Prepare("insert into test(name,age)values(?,?)");
    if err != nil {
        fmt.Println(err.Error());
        return;
    }
    defer stmt.Close();
    if result, err := stmt.Exec("张三", 20); err == nil {
        if id, err := result.LastInsertId(); err == nil {
            fmt.Println("insert id : ", id);
        }
    }
    if result, err := stmt.Exec("李四", 30); err == nil {
        if id, err := result.LastInsertId(); err == nil {
            fmt.Println("insert id : ", id);
        }
    }
    if result, err := stmt.Exec("王五", 25); err == nil {
        if id, err := result.LastInsertId(); err == nil {
            fmt.Println("insert id : ", id);
        }
    }
}

/* 测试数据库数据更新 */
func (test *TestMysql)Update() {
    if test.db == nil {
        return;
    }
    stmt, err := test.db.Prepare("update test set name=?,age=? where age=?");
    if err != nil {
        fmt.Println(err.Error());
        return;
    }
    defer stmt.Close();
    if result, err := stmt.Exec("周七", 40, 25); err == nil {
        if c, err := result.RowsAffected(); err == nil {
            fmt.Println("update count : ", c);
        }
    }
}

/* 测试数据库数据读取 */
func (test *TestMysql)Read() {
    if test.db == nil {
        return;
    }
    rows, err := test.db.Query("select id,name,age from test limit 0,5");
    if err != nil {
        fmt.Println(err.Error());
        return;
    }
    defer rows.Close();
    fmt.Println("");
    cols, _ := rows.Columns();
    for i := range cols {
        fmt.Print(cols[i]);
        fmt.Print("\t");
    }
    fmt.Println("");
    var id int;
    var name string;
    var age int;
    for rows.Next() {
        if err := rows.Scan(&id, &name, &age); err == nil {
            fmt.Print(id);
            fmt.Print("\t");
            fmt.Print(name);
            fmt.Print("\t");
            fmt.Print(age);
            fmt.Print("\t\r\n");
        }
    }
}

/* 测试数据库删除 */
func (test *TestMysql)Delete() {
    if test.db == nil {
        return;
    }
    stmt, err := test.db.Prepare("delete from test where age=?");
    if err != nil {
        fmt.Println(err.Error());
        return;
    }
    defer stmt.Close();
    if result, err := stmt.Exec(20); err == nil {
        if c, err := result.RowsAffected(); err == nil {
            fmt.Println("remove count : ", c);
        }
    }
}

func (test *TestMysql)Close() {
    if test.db != nil {
        test.db.Close();
    }
}

func main() {
    if test, err := Init(); err == nil {
        test.Create();
        test.Update();
        test.Read();
        test.Delete();
        test.Read();
        test.Close();
    }
}

参考代码被转载了N次,没找到出处,部分过时内容,进行了修改。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:yuchuanabcd

查看原文:Golang操作Mysql

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

1871 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传