作者:show窝_515 | 来源:互联网 | 2022-12-13 13:55
我的Golang项目中的SQLite3有问题。我想将数据插入数据库,但这给了我错误database is locked
。我知道这是同样的问题(Sqlite3错误:数据库被锁定在golang中),但是从那里得到的答案无效。我不知道我在做什么错。这是我的代码:
var (
tpl *template.Template
db, _ = sql.Open("sqlite3", "database/pastozbior.db")
)
func main() {
http.HandleFunc("/", addCopypasta)
http.ListenAndServe(":8000", nil)
}
func getCopypasta() []Copypasta {
copypastaList := []Copypasta{}
var title, body string
rows, _ := db.Query("select title, body from copypasta")
for rows.Next() {
rows.Scan(&title, &body)
copypastaList = append(copypastaList, Copypasta{title, body})
}
defer rows.Close()
return copypastaList
}
func addCopypasta(w http.ResponseWriter, r *http.Request) {
tpl.ExecuteTemplate(w, "main.html", nil)
if r.Method == "POST" {
r.ParseForm()
// add copypasta to database
stmt, err := db.Prepare("INSERT INTO copypasta(title, body, approved) values(?,?,0)")
if err != nil {
log.Fatal(err)
}
res, err := stmt.Exec("testTitle", "TestBody")
if err != nil {
log.Fatal(err)
}
id, err := res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println(id)
}
}
在此先感谢您的帮助!
1> Bert Verhees..:
您必须在创建行的行的正下方放置defer rows.Close()。因为,在您做某事时出现紧急情况的情况下,永远不会达到延迟,行也永远不会关闭,然后会发生这种错误情况。在您的代码中,您放弃了defer-construct优于其他编程环境的巨大优势。