【发布时间】:2019-07-09 18:31:42
【问题描述】:
我现在尝试restful api,其中列SequenceID 不是自动增量,因为故意,当我这样计数时,我的问题是库gorm countSequenceId := db.Debug().Table("SMSBlast2").Count( &smsblast1) , 结果是 sql: Scan error on column index 0, name "": unsupported Scan, storage driver.Value type int64 into type *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()
}
【问题讨论】:
-
Count()需要int64类型的值参数,而不是SMSBlast。尝试传递一个 int64 变量。 -
Count() 计算记录数,所以需要整数而不是结构体
-
@MadWombat,我尝试使用 db.raw 更改我的代码,您可以在下面看到我的代码我已经更改了我的代码,但现在我得到 [1 行受影响或返回],但是在我 fmt.Println(countSequenceId) print nil 之后,如何将结果计数显示到 golang ?
-
@hassansin 我已经更改了我的代码,我如何将查询 gorm 显示为像 count = 10 这样的字符串?
-
这不是你的问题。您的问题是,无论您使用 Gorm 方法 Count() 还是原始 SQL,结果都是整数,而不是 SMSBlast。所以你需要传递对整数的引用,而不是对结构的引用。
标签: sql-server go orm