Java转Go日记(四十四):Sql构建

1.1.1. 执行原生SQL

复制代码
    db.Exec("DROP TABLE users;")
    db.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,22,33})

    // Scan
    type Result struct {
        Name string
        Age  int
    }

    var result Result
    db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)

1.1.2. sql.Row & sql.Rows

获取查询结果为*sql.Row或*sql.Rows

复制代码
    row := db.Table("users").Where("name = ?", "jinzhu").Select("name, age").Row() // (*sql.Row)
    row.Scan(&name, &age)

    rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)
    defer rows.Close()
    for rows.Next() {
        ...
        rows.Scan(&name, &age, &email)
        ...
    }

    // Raw SQL
    rows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows() // (*sql.Rows, error)
    defer rows.Close()
    for rows.Next() {
        ...
        rows.Scan(&name, &age, &email)
        ...
    }

1.1.3. 迭代中使用sql.Rows的Scan

复制代码
    rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)
    defer rows.Close()

    for rows.Next() {
      var user User
      db.ScanRows(rows, &user)
      // do something
    }
相关推荐
泡海椒2 分钟前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go3 分钟前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥43094 分钟前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
Wang's Blog7 分钟前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
岩钧8 分钟前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老14 分钟前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户3600555790015 分钟前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端
yliucherish21 分钟前
从零实现一个 SQL 注入检测引擎:报错注入与布尔盲注的误报控制
后端
bigbread23 分钟前
状态模式-住院患者状态管理
后端
中科三方42 分钟前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php