2016-06-22 4 views
0

Qt에서 SQLite3 데이터베이스에 대한 연결을 열려고한다고 가정합니다. 존재하는 데이터베이스 dbName에 연결됩니다.Qt에서 데이터베이스 드라이버로 파일을 사용할 수 있는지 확인하는 방법

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 

는 지금은 dbNameQFileDialog를 통해 수신되는 db.setDatabaseName(dbName)을 설정해야합니다.

그러나 dbName이 유효한 파일 이름 인 경우 db.open()은 항상 true입니다. 어쨌든 dbName 파일이 SQLite3 데이터베이스인지 확인해야합니까? 지금 할 수있는 일은 쿼리를 실행하고 다음과 같은 오류를 확인하는 것입니다.

db.setDatabaseName(dbName); 
if (db.open()) { 
    QSqlQuery qr(db); 
    if (!qr.exec(".database;")) { 
    qDebug() << qr.lastError().text(); 
    return false; 
    } 
} 

파일이 비어 있으면 작동하지 않습니다.

+0

응용 프로그램의 목적은 무엇입니까? * 모든 SQLite 데이터베이스를 열 수 있어야합니까? 아니면 자신의 응용 프로그램 파일에 액세스하고 싶습니까? –

+0

그것은 SQLite 데이터베이스를 열 수 있어야합니다, 데이터를 읽고, 사용자가 수정하고 저장할 수 있습니다 – scmg

답변

1

Qt는 항상 SQLITE_OPEN_CREATE 플래그를 사용하므로 존재하지 않거나 빈 파일이 유효한 것으로 간주됩니다 (비어있는 새 데이터베이스의 경우).

Qt를 변경하거나 데이터베이스 드라이버를 직접 작성하지 않으려면 파일에서 유효한 database header을 수동으로 확인해야합니다.

1

나는 똑같은 문제에 직면해야했다. 당신이 존재하지 않는 파일을 가리 데이터베이스를 열려고하면, 데이터베이스가 될 수 있도록

1/CL 말했듯이, Qt는이 항상 SQLITE_OPEN_CREATE 플래그를 사용하여 사실

는 두 가지 문제가있다 그리고 당신은 성공을 얻습니다. 데이터베이스에 요청을 할 때까지, 그래서

당신은 파일을 열기 전에 존재하는지 확인하여이 문제를 ADRESS 수

이는

2/SQLite는 사용 "게으른 초기화"(참조 Qfile을이 :: 정적 메서드를 존재) 파일이 실제로 열리지 않습니다. 데이터베이스를 연 직후에 간단한 요청을 실행하여이 문제를 해결하고 결과를 확인할 수 있습니다.

데이터베이스 스키마에 대한 사전에 아무 것도 모르는 경우

, 당신은 "PRAGMA"값 중 하나를 읽으려고 할 수 있습니다 http://www.sqlite.org/pragma.html#pragma_table_info

관련 문제