Gorm配合MySQL使用,db.Save 不能插入數(shù)據(jù)到數(shù)據(jù)庫
相關(guān)代碼
type Like struct {
ID int `gorm:"primary_key"`
Ip string `gorm:"type:varchar(20);not null;index:ip_idx"`
Ua string `gorm:"type:varchar(256);not null;"`
Title string `gorm:"type:varchar(128);not null;index:title_idx"`
CreatedAt time.Time
}
func CreateUa(c *gin.Context) {
var like Like
like = Like{Ip:c.PostForm("ip"),Ua:c.PostForm("ua"),Title:c.PostForm("title")}
//db.Create(&like)
db.Save(&like)
c.JSON(http.StatusCreated, gin.H{
"status": http.StatusCreated,
"message": "Like record created successfully!",
"LikeId": like.ID})
}
數(shù)據(jù)庫連接
var(
db *gorm.DB
err error
sqlConnection = "username:password.@(127.0.0.1:3309)/gotest?charset=utf8&parseTime=True&loc=Local"
)
db,err = gorm.Open("mysql",sqlConnection)
if err != nil{
panic("failed to connect database")
}
defer db.Close()
執(zhí)行POST操作
http://localhost:8080/v1/createua?ip="192.168.0.8"&ua="UU888"&title="This is 8th record"
執(zhí)行POST請求,數(shù)據(jù)庫中只有ID和CreateAt字段的值,其他三個(gè)字段的數(shù)據(jù)沒有插入到數(shù)據(jù)庫
看你的數(shù)據(jù)庫設(shè)置應(yīng)該是沒有問題的。因?yàn)槲以谑褂胓orm的時(shí)候是開啟了數(shù)據(jù)庫連接池,因此我沒有在一個(gè)地方專門對db進(jìn)行close。我不知道你代碼里面db的生命周期是怎么樣的。建議你在調(diào)試環(huán)境中使用db = db.Debug(),可以打印要執(zhí)行的sql語句。此外,還可以在你的代碼中通過err := db.Save(&like).Error, 檢出err查看你程序的執(zhí)行是否有問題.
======補(bǔ)充================
package database
var db *gorm.DB
func init() {
var dbSrc = "username:password.@(127.0.0.1:3309)/gotest?charset=utf8&parseTime=True&loc=Local"
newDb, err := gorm.Open("mysql", dbSrc)
if err != nil {
panic(err)
}
db = newDb
sqlDb := db.DB()
sqlDb.SetMaxOpenConns(100)
sqlDb.SetMaxIdleConns(15)
if gin.IsDebugging() {
db = db.Debug()
}
}
func DB() *gorm.DB {
return db.New()
}
一般情況下我會(huì)將數(shù)據(jù)庫的初始化工作放到一個(gè)init中,然后在包含main函數(shù)的文件中導(dǎo)入這個(gè)包(package),這里就舉個(gè)例子:
import _ "database"
這樣在程序啟動(dòng)的時(shí)候, 就會(huì)會(huì)自動(dòng)初始化db(而且不用擔(dān)心會(huì)初始化多次)。然后在需要使用的地方只需要調(diào)用
db := database.DB()
這樣可以拿到一個(gè)db對象。
我覺得答案都錯(cuò)了,Save是有Create的作用的,就是當(dāng)ID不存在的時(shí)候,會(huì)調(diào)用Create
樓主問題是出在參數(shù)傳過去沒接收到,他也說了:“執(zhí)行POST請求,數(shù)據(jù)庫中只有ID和CreateAt字段的值,其他三個(gè)字段的數(shù)據(jù)沒有插入到數(shù)據(jù)庫”
說明是插入成功的
所以問題在這里:http://localhost:8080/v1/createua?ip="192.168.0.8"&ua="UU888"&title="This is 8th record"
這是get請求啊,樓主用post去接收,肯定獲取不到值啊
db.First(&user)
user.Name = "jinzhu 2"
user.Age = 100
db.Save(&user)
//// UPDATE users SET name='jinzhu 2', age=100, birthday='2016-01-01', updated_at = '2013-11-17 21:34:10' WHERE id=111;
摘自:http://doc.gorm.io/crud.html#...
注意,Save是更新全部字段,但是對于數(shù)據(jù)庫來說總得知道哪條數(shù)據(jù)要更新吧(id來指定),看你的場景應(yīng)該是想要用Create,而不是Save
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。