4 回答

TA貢獻1773條經(jīng)驗 獲得超3個贊
:memory:
將為每個連接打開一個單獨的數(shù)據(jù)庫。改用file::memory:?cache=shared
。
更新:我在使用上面的代碼時也遇到了一些鎖定問題,在我看來,在測試中使用:memory:
with是一個更好的解決方案。db.DB().SetMaxOpenConns(1)

TA貢獻1875條經(jīng)驗 獲得超5個贊
也許這會幫助某人
我對“沒有這樣的表”有同樣的問題,并找到了一個確切的解釋:
如果 sql.Rows 在下一個查詢之前沒有關(guān)閉,那么驅(qū)動程序在下一個查詢時不會返回這樣的表。問題僅存在于內(nèi)存存儲中,文件支持的數(shù)據(jù)庫的相同測試運行良好。
在那之后,我找到了我忘記做的代碼部分rows.Close()
,修復(fù)了它,現(xiàn)在它可以正常工作了。

TA貢獻1780條經(jīng)驗 獲得超4個贊
如果您使用與在此處發(fā)布的表相同的模式創(chuàng)建表,則永遠不會創(chuàng)建該表,因為該模式有語法錯誤,它應(yīng)該是這樣的
var schema = `
DROP TABLE IF EXISTS agent;
CREATE TABLE agent (
Id INTEGER PRIMARY KEY
);
DROP TABLE IF EXISTS task;
CREATE TABLE task (
Id INTEGER PRIMARY KEY
);
`
我猜你的代碼與示例代碼相同,所以在 init 函數(shù)中你跳過了錯誤檢查db.Exec(schema)(你永遠不應(yīng)該對 中的任何函數(shù)這樣做Go)。由于未檢查錯誤并且執(zhí)行模式時出錯,因此永遠不會創(chuàng)建表但程序繼續(xù),請更正您的模式并檢查錯誤然后重試。在你的初始化函數(shù)中試試這個:
_, err := db.Exec(schema)
if err != nil {
log.Fatal(err)
}

TA貢獻1775條經(jīng)驗 獲得超8個贊
當(dāng)我嘗試使用錯誤的事務(wù)時,出現(xiàn)“內(nèi)存中 sqlite 沒有這樣的表”錯誤。例子:
tx, err = DB.Begin()
if err != nil {
ErrorStatus = true
goto ErrorLabel
}
tempQuery = "INSERT INTO msg_to_like (msg_id, user_id) " +
"VALUES ('" + nmbr + "', " + usr + ");"
fmt.Println(tempQuery)
if _, err = DB.Exec(tempQuery); err != nil {
ErrorStatus = true
goto ErrorLabel
}
...
但有必要:
if _, err = tx.Exec(tempQuery); err != nil {
出現(xiàn)此錯誤后,使用的表崩潰了。
- 4 回答
- 0 關(guān)注
- 252 瀏覽
添加回答
舉報