>백엔드 개발 >Golang >Go의 SQLite3에서 'Database is Locked' 오류를 방지하는 방법은 무엇입니까?

Go의 SQLite3에서 'Database is Locked' 오류를 방지하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 22:20:17336검색

How to Avoid the

Go를 사용하여 SQLite3에서 "데이터베이스가 잠겼습니다" 오류 처리

Go에서 SQLite3 데이터베이스로 작업할 때 사용자에게 "데이터베이스가 잠겼습니다" 오류가 발생할 수 있습니다. 이 오류는 동일한 데이터베이스 파일에 액세스하려고 시도하는 동시 스레드가 여러 개 있음을 나타냅니다.

이 문제를 해결하려면 프로그램 내에서 데이터베이스에 대한 단일 연결만 유지되는지 확인하십시오. 쿼리 결과를 닫는 것이 중요하지만 여러 데이터베이스 파일 핸들 생성을 고려하는 것도 중요합니다.

다음 코드 조각은 문제를 보여줍니다.

func main() {
    database, tx, err := getDatabaseHandle()
    if err != nil {
        log.Fatal(err)
    }
    defer database.Close()
    dosomething(database, tx)
}

func dosomething(database *sql.DB, tx *sql.Tx) error {
    rows, err := database.Query("select * from sometable where name=?", "some")
    if err != nil {
        return err
    }

    defer rows.Close() // Deferring the rows.Close() helps resolve the issue

    if rows.Next() {
        ...
    }
    rows.Close()
    //some insert queries
    tx.Commit()
}

연기 행 추가에 유의하세요. dosomething 함수 내의 Close()입니다. 이렇게 하면 데이터베이스 파일 핸들이 즉시 해제되어 여러 핸들이 생성되는 것을 방지할 수 있습니다.

이 접근 방식을 따르면 Go에서 SQLite3 데이터베이스 연결을 효과적으로 관리하고 "데이터베이스가 잠겼습니다" 오류를 방지할 수 있습니다.

위 내용은 Go의 SQLite3에서 'Database is Locked' 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.