亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不涉及并發線程時如何修復“數據庫被鎖定”?高朗,sqlite3

不涉及并發線程時如何修復“數據庫被鎖定”?高朗,sqlite3

Go
茅侃侃 2023-01-03 11:29:48
我正在運行一個 sql 文件列表。文件列表來自同一個 sqlite3 數據庫,我將對其執行 sql,因此只有一個數據庫連接。如果我不終止 sql 文件的循環,它將為從第一個文件開始的每個文件返回“數據庫已鎖定”錯誤。不起作用的事情:無效:從Sqlite3 添加 rows.Close() 錯誤:數據庫在 golang 中被鎖定刪除 sqlx 并使用 database/sql 沒有任何改變。無效:打開或關閉 Navicat。重新啟動我的筆記本電腦,沒有效果。無效:將數據庫轉儲到新文件,然后針對新文件運行進程。package main import ( "database/sql" "fmt" "io/ioutil" "os" _ "github.com/mattn/go-sqlite3" ) func main() { dbPath := "/Users/darianhickman/Documents/wc_study/history.db" db, err := sql.Open("sqlite3", dbPath) if err != nil {     println("db open failed.", err)     os.Exit(-1) } defer db.Close() // qry := `select list_folder||'/'|| sql_file as script from run_list where 'order' > 0 ORDER BY 'order'; ` qry := `select list_folder||'/'|| sql_file as script from run_list  where run_order > 0  ORDER BY run_order;` scripts, err := db.Query(qry) if err != nil {     println("query failed ", qry)     os.Exit(-1) } defer scripts.Close() var file string for scripts.Next() {     err = scripts.Scan(&file)     if err != nil {         println(err)     }     println(file[len(file)-80:])     sqlScript, err := ioutil.ReadFile(file)     if err != nil {         println("reading script file failed\n", file)     }     if _, err := db.Exec(string(sqlScript)); err != nil {         fmt.Println(string(sqlScript[:80]))         fmt.Println(err)     } else {         fmt.Println("Success ", string(sqlScript[:80]))     } }}
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

根據官方文檔


When you get a database is locked, please use the following options.


Add to DSN: cache=shared


Example:


  db, err := sql.Open("sqlite3", "file:locked.sqlite?cache=shared")


Next, please set the database connections of the SQL package to 1:


  db.SetMaxOpenConns(1)


查看完整回答
反對 回復 2023-01-03
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

我放棄了在執行腳本時閱讀腳本列表并且成功了。


package main


import (

    "fmt"

    "io/ioutil"


    "github.com/jmoiron/sqlx"

    _ "github.com/mattn/go-sqlite3"

)


func main() {

    // dbPath := "file:/Users/darianhickman/Documents/wc_study/history.db?cache=shared"

    dbPath := "file:/Users/darianhickman/Documents/wc_study/history.db"

    db := sqlx.MustConnect("sqlite3", dbPath)

    defer db.Close()

    // db.SetMaxOpenConns(1)


    // qry := `select list_folder||'/'|| sql_file as script from run_list where 'order' > 0 ORDER BY 'order'; `

    qry := `select list_folder||'/'|| sql_file as script from run_list 

    where run_order > 0 

    ORDER BY run_order;`


    scripts, err := db.Query(qry)

    if err != nil {

        println("script qry failed ", qry)

    }

    defer scripts.Close()

    var files []string

    var file string


    // Giving up on executing sql scripts while reading the query of scripts.

    for scripts.Next() {

        err = scripts.Scan(&file)

        if err != nil {

            println(err)

        } else {

            files = append(files, file)

        }

    }


    for _, file := range files {


        println(file[len(file)-80:])

        sqlScript, err := ioutil.ReadFile(file)

        if err != nil {

            println("reading script file failed\n", file)

        }

        if _, err := db.Exec(string(sqlScript)); err != nil {

            fmt.Println(string(sqlScript[:80]))

            fmt.Println(err)


        } else {

            fmt.Println("Success ", string(sqlScript[:80]))

        }

    }


}



查看完整回答
反對 回復 2023-01-03
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號