登录
首页 >  Golang >  Go问答

sql:列索引 0 上扫描错误,名称“”:不支持扫描,将 driver.Value 类型 int64 存储到类型 *main.SMSBlast 中?

来源:stackoverflow

时间:2024-04-12 21:03:26 438浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《sql:列索引 0 上扫描错误,名称“”:不支持扫描,将 driver.Value 类型 int64 存储到类型 *main.SMSBlast 中?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我现在尝试restful api,其中列sequenceid不是自动递增,因为故意,当我像这样计数时,我的问题是库gorm countsequenceid := db.debug().table("smsblast2").count( &smsblast1) ,结果是 sql: 列索引 0 上扫描错误,名称 "": 不支持扫描,将 driver.value 类型 int64 存储到类型 *main.smsblast

package main

import (
    "encoding/json"
    "fmt"
    "github.com/gorilla/mux"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mssql"
    "log"
    "net/http"
    "strconv"
    "time"
)

type SMSBlast struct {
    SequenceID   int `gorm:"primary_key";column:"SequenceID"`
    MobilePhone string `gorm:"column:MobilePhone"`
    Output  string  `gorm:"column:Output"`
    WillBeSentDate *time.Time `gorm:"column:WillBeSentDate"`
    SentDate *time.Time `gorm:"column:SentDate"`
    Status *string `gorm:"column:Status"`
    DtmUpd time.Time `gorm:"column:DtmUpd"`
}

func (SMSBlast) TableName() string {
    return "SMSBlast2"
}


func insertSMSBlast(w http.ResponseWriter, r *http.Request){
    fmt.Println("New Insert Created")
    db, err := gorm.Open("mssql", "sqlserver://sa:@localhost:1433?database=CONFINS")
    if err != nil{
        panic("failed to connect database")
    }
    defer db.Close()


    vars := mux.Vars(r)
    mobilephone := vars["mobilephone"]
    output := vars["output"]

    var(
        smsblast1 SMSBlast
    )
    countSequenceId := db.Debug().Raw("SELECT COUNT (*) FROM SMSBlast2").Scan(&smsblast1)
    fmt.Println(countSequenceId)
    msg, err :=  json.Marshal(countSequenceId)
    if err != nil{
        fmt.Println(err.Error())
    }



    sequenceid1,_ := strconv.Atoi(string(msg))
    fmt.Println("SequenceID : " , sequenceid1)

    smsblasts := SMSBlast{SequenceID: sequenceid1,MobilePhone: mobilephone,Output:output, DtmUpd: time.Now()}
    prindata := db.Create(&smsblasts)
    fmt.Println(prindata)
}


func handleRequests(){
    myRouter := mux.NewRouter().StrictSlash(true)
    myRouter.HandleFunc("/smsblaststest",allSMSBlasts).Methods("POST")
    myRouter.HandleFunc("/smsblaststestInsert/{mobilephone}/{output}", insertSMSBlast).Methods("POST")
    log.Fatal(http.ListenAndServe(":8080",myRouter))

}

func main(){
    fmt.Println("SMSBLASTS ORM")
    handleRequests()
}

解决方案


您似乎假设 gorm 方法将为您返回结果。事实并非如此。 gorm 返回错误或 nil,并且您将引用传递给要存储结果的变量。因此,要在某些内容上使用 count(),您可以编写类似

的内容
var count int
db.model(&smsblast{}).count(&count)
fmt.printf("count: %d\n", count)

也就是说,如果您只是想确保每次都能获得新的序列 id,为什么不使用自动增量呢?

type SMSBlast struct {
    SequenceID   int `gorm:"primary_key";column:"SequenceID";"AUTO_INCREMENT"`
    ... 
}

以上就是《sql:列索引 0 上扫描错误,名称“”:不支持扫描,将 driver.Value 类型 int64 存储到类型 *main.SMSBlast 中?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>