zoukankan      html  css  js  c++  java
  • goland 新建

    Environment: https://goproxy.cn,direct
    package main

    import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql" //init()
    "time"
    )
    var db sql.DB
    func initMySQL()(err error) {
    // DSN:Data Source Name
    //dsn := "User:password@tcp(127.0.0.1:3306)/dbname"
    dsn := "root:root@tcp(127.0.0.1:3306)/m9"
    db, err = sql.Open("mysql",dsn)
    if err != nil {
    panic(err)
    }
    //尝试与数据库建立连接
    err = db.Ping()
    if err != nil {
    fmt.Println("connet error")
    return
    }
    db.SetConnMaxIdleTime(time.Second
    10)
    db.SetMaxOpenConns(200) // 最大连接数
    db.SetMaxIdleConns(10) //最大空闲连接数
    return
    }
    func main() {
    if err := initMySQL();err!=nil {
    fmt.Printf("connect err:%v ", err)
    }
    defer db.Close() //关闭连接,需要放在err后
    fmt.Println("connect success")
    }
    type user struct {
    id int
    name string
    }
    //查询单条数据示例
    func queryRowDemo() {
    sqlStr := "select id, name from staff where id=?"
    var u user
    //非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库连接不会被释放
    row := db.QueryRow(sqlStr,1)
    err := row.Scan(&u.id, &u.name)
    if err != nil {
    fmt.Printf("scan failed, err:%v ", err)
    return
    }
    fmt.Printf("id:%d name:%d",u.id, u.name)
    }
    //查询多条数据
    func queryMultiRowDemo() {
    sqlStr := "select id, name from staff where id < ?"
    rows, err := db.Query(sqlStr,8)
    if err != nil {
    fmt.Printf("query faild, err:%v ", err)
    return
    }
    //非常重要:关闭rows释放持有的数据库连接
    defer rows.Close()
    //循环读取结果集中的数据
    for rows.Next() {
    var u user
    err := rows.Scan(&u.id, &u.name)
    if err != nil {
    fmt.Printf("Scan failed, err:%v ", err)
    return
    }
    fmt.Printf("id:%d name:%s",u.id, u.name)
    }
    }
    //插入数据
    func insertRowDemo() {
    sqlStr := "insert into staff(id,name)values(?,?)"
    ret, err := db.Exec(sqlStr, 4, "zhang")
    if err != nil {
    fmt.Printf("insert failed, err:%v ", err)
    return
    }
    var theID int64
    theID, err = ret.LastInsertId() //新插入数据的id
    if err != nil {
    fmt.Printf("get lastinsert ID failed, err:%v ", err)
    return
    }
    fmt.Printf("insert success, hte id is %d. ", theID)
    }
    //更新数据
    func updateRowDemo() {
    sqlStr := "update staff set name=? where id = ?"
    ret, err := db.Exec(sqlStr, "zhang",2)
    if err != nil {
    fmt.Printf("update failed, err:%v ", err)
    return
    }
    n, err := ret.RowsAffected() // 操作影响的行数
    if err != nil {
    fmt.Printf("get RowsAffected failed, err:%v ", err)
    return
    }
    fmt.Printf("update success, affected rows:%d ", n)
    }
    //删除数据
    func deleteRowDemo() {
    sqlStr := "delete from staff where id = ?"
    ret, err := db.Exec(sqlStr, 2035)
    if err != nil {
    fmt.Printf("delete failed, err:%v ", err)
    return
    }
    n, err := ret.RowsAffected() //操作影响的行数
    if err != nil {
    fmt.Printf("get RowsAffected failed, err:%v ", err)
    return
    }
    fmt.Printf("delete success, affected rows:%d ", n)
    }

  • 相关阅读:
    [收集]Grid Animation-01
    陕西航天大学横幅动态测试
    IPC机制
    Android使用权限
    DDMS
    看懂UML类图和时序图
    Frameworks detected: Android framework is detected in the project
    CoordinatorLayout父布局的Behavior
    Android权限记录
    AndroidManifest.xml文件中属性记录
  • 原文地址:https://www.cnblogs.com/simadongyang/p/14317870.html
Copyright © 2011-2022 走看看