登录
首页 >  Golang >  Go问答

在 sqlite3 golang 上出现数据库锁定错误?

来源:stackoverflow

时间:2024-04-11 13:54:34 174浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《在 sqlite3 golang 上出现数据库锁定错误?》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我的查询

var m sync.mutex
m.lock()
defer m.unlock()

_, err1 := database.exec(`update  userdata set coins = coins + ? where rollno = ?`, transfer_data.coins, transfer_data.receiverrollno)    
if err1 != nil {
   //if some error rollback databse to initial condition and print the error 
   fmt.println("error lies in database.exec() err1")
   fmt.println(err1)
   tx.rollback()
   return
   // panic(err)
}
    
_, err2 := database.exec(`update userdata set coins = coins - ?  where rollno = ? and coins - ? >= 0`, transfer_data.coins, claims.rollno, transfer_data.coins)
    
if err2 != nil {
   //if some error rollback databse to initial condition and print the error
   fmt.println(err2)
   fmt.println("error lies in database.exec() err2")
   tx.rollback()
   return
}

//we are here so this means transaction is successful so commit this change to the database
tx.commit()

我的桌子

UserCoin_info := `CREATE TABLE IF NOT EXISTS UserData(
   "rollno" INTEGER NOT NULL,
   "coins" INTEGER NOT NULL
);`
    
statement, err := db.Prepare(UserCoin_info)
if err != nil {
   panic(err)
}
statement.Exec()

在第一个查询中进行更新时,我收到数据库锁定错误,如 err1,我尝试使用互斥体,但仍然收到此错误,我搜索了可能的解决方案,但没有得到任何解决方案。


正确答案


数据库锁定是未关闭*stmt和*rows的结果。

statement, err := db.Prepare(UserCoin_info)
if err != nil {
     panic(err)
}
defer statement.Close()

statement.Exec()

今天关于《在 sqlite3 golang 上出现数据库锁定错误?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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