美文网首页
go 操作数据库

go 操作数据库

作者: chase_lwf | 来源:发表于2020-09-14 10:02 被阅读0次

    内容

    1 database/sql基本操作
    2 gorm基本操作

    1 database/sql

    • 初始化一个数据库连接
      sql包是go提供的原生的数据库操作接口,所以第一步需要引入相应数据库的驱动
    import (
        "database/sql"
    
        _ "github.com/go-sql-driver/mysql" // 引入mysql驱动
    )
    
    func main() {
        dsn := "user:password@tcp(127.0.0.1:3306)/dbname"
        db, err := sql.Open("mysql", dsn)
        if err != nil {
            panic(err)
        }
        defer db.Close() // 注意这行代码要写在上面err判断的下面,如果open时,db对象没有初始成功,就调用了close,要报错
    }
    
    • 初始化连接
      Open方法只是初始化了一个db对象,并没有进行连接,一种懒加载思想,待用到这个连接时在尝试去建立连接
    // 尝试与数据库建立连接(校验dsn是否正确)
        err = db.Ping()
        if err != nil {
            return err
        }
        return nil
    
    • 进行增、删、改、查
    增、删、改都通过Exec方法进行操作
    func (db *DB) Exec(query string, args ...interface{}) (Result, error)
    
    增,删除和更新一样的,编写相应sql即可
    func insert() {
        sqlStr := "insert into user(name, age) values (?,?)"
        ret, err := db.Exec(sqlStr, "11", 11)
        if err != nil {
            return
        }
         // 获取插入id
        theID, err := ret.LastInsertId() 
        if err != nil {
            fmt.Printf("get lastinsert ID failed, err:%v\n", err)
            return
        }
        fmt.Printf("insert success, the id is %d.\n", theID)
    }
    

    查询:

    查询单条数据
    func queryRowDemo() error {
        sqlStr := "select id, name, age from user where id=?"
        var u user
    
        err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age)
        if err != nil {
            return err
        }
    }
    
    查询多条数据
    func queryMultiRowDemo() error {
        sqlStr := "select id, name, age from user where id > ?"
        rows, err := db.Query(sqlStr, 0)
        if err != nil {
            return err
        }
        defer rows.Close()
    
        // 循环读取结果集中的数据
        for rows.Next() {
            var u user
            err := rows.Scan(&u.id, &u.name, &u.age)
            if err != nil {
                return err
            }
        }
    }
    
    • prepare()进行sql预编译
    func (db *DB) Prepare(query string) (*Stmt, error)
    
    func prepareInsertDemo()  error {
        sqlStr := "insert into user(name, age) values (?,?)"
        stmt, err := db.Prepare(sqlStr)
        if err != nil {
            return err
        }
        defer stmt.Close()
        _, err = stmt.Exec("小王子", 18)
        if err != nil {
            return err
        }
        _, err = stmt.Exec("沙河娜扎", 18)
        if err != nil {
            return err
        }
    }
    
    • 事务处理
    func (db *DB) Begin() (*Tx, error)
    func (tx *Tx) Commit() error
    func (tx *Tx) Rollback() error
    

    2 gorm 基本操作

    相关文章

      网友评论

          本文标题:go 操作数据库

          本文链接:https://www.haomeiwen.com/subject/gmpoektx.html