QSqlDriver Class

QSqlDriver 클래스는 특정 SQL 데이터베이스에 액세스하기 위한 추상 기본 클래스입니다. 더 보기...

헤더: #include <QSqlDriver>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
상속합니다: QObject

공용 유형

enum DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries, …, CancelQuery }
enum IdentifierType { FieldName, TableName }
enum NotificationSource { UnknownSource, SelfSource, OtherSource }
enum StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement }

속성

공공 기능

QSqlDriver(QObject *parent = nullptr)
virtual ~QSqlDriver()
virtual bool beginTransaction()
virtual void close() = 0
virtual bool commitTransaction()
virtual QSqlResult *createResult() const = 0
virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const
virtual QVariant handle() const
virtual bool hasFeature(QSqlDriver::DriverFeature feature) const = 0
virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual bool isOpen() const
bool isOpenError() const
QSqlError lastError() const
(since 6.0) virtual int maximumIdentifierLength(QSqlDriver::IdentifierType type) const
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
virtual bool open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0
virtual QSqlIndex primaryIndex(const QString &tableName) const
virtual QSqlRecord record(const QString &tableName) const
virtual bool rollbackTransaction()
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
virtual QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
virtual QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual bool subscribeToNotification(const QString &name)
virtual QStringList subscribedToNotifications() const
virtual QStringList tables(QSql::TableType tableType) const
virtual bool unsubscribeFromNotification(const QString &name)

신호

void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

보호된 기능

virtual void setLastError(const QSqlError &error)
virtual void setOpen(bool open)
virtual void setOpenError(bool error)

상세 설명

이 클래스는 직접 사용해서는 안 됩니다. 대신 QSqlDatabase 을 사용하세요.

자신만의 SQL 드라이버를 만들려면 이 클래스를 서브클래싱하고 순수 가상 함수와 필요한 가상 함수를 다시 구현하면 됩니다. 자세한 내용은 나만의 데이터베이스 드라이버 작성 방법을 참조하세요.

QSqlDatabaseQSqlResult도 참조하세요 .

멤버 유형 문서

enum QSqlDriver::DriverFeature

이 열거형에는 드라이버가 지원할 수 있는 기능의 목록이 포함되어 있습니다. hasFeature ()를 사용하여 기능의 지원 여부를 쿼리하세요. 일부 기능은 데이터베이스 서버에 따라 다르므로 QSqlDatabase::open()로 데이터베이스 연결이 성공적으로 열린 후에만 제대로 확인할 수 있습니다.

상수설명
QSqlDriver::Transactions0드라이버가 SQL 트랜잭션을 지원하는지 여부입니다.
QSqlDriver::QuerySize1데이터베이스가 쿼리 크기를 보고할 수 있는지 여부입니다. 일부 데이터베이스는 쿼리의 크기(즉, 반환되는 행 수) 반환을 지원하지 않으며, 이 경우 QSqlQuery::size()는 -1을 반환합니다.
QSqlDriver::BLOB2드라이버가 이진 큰 객체 필드를 지원하는지 여부.
QSqlDriver::Unicode3데이터베이스 서버가 유니코드 문자열을 지원하는 경우 드라이버가 유니코드 문자열을 지원하는지 여부.
QSqlDriver::PreparedQueries4드라이버가 준비된 쿼리 실행을 지원하는지 여부.
QSqlDriver::NamedPlaceholders5드라이버가 명명된 자리 표시자 사용을 지원하는지 여부.
QSqlDriver::PositionalPlaceholders6드라이버가 위치 지정 자리 표시자 사용을 지원하는지 여부.
QSqlDriver::LastInsertId7드라이버가 마지막으로 터치한 행의 ID 반환을 지원하는지 여부.
QSqlDriver::BatchOperations8드라이버가 일괄 처리 작업을 지원하는지 여부는 QSqlQuery::execBatch()를 참조하세요.
QSqlDriver::SimpleLocking9다른 쿼리에 읽기 잠금이 있는 동안 드라이버가 테이블에 대한 쓰기 잠금을 허용하지 않는지 여부.
QSqlDriver::LowPrecisionNumbers10드라이버가 낮은 정밀도의 숫자 값 가져오기를 허용하는지 여부.
QSqlDriver::EventNotifications11드라이버가 데이터베이스 이벤트 알림을 지원하는지 여부.
QSqlDriver::FinishQuery12QSqlQuery::finish()가 호출될 때 드라이버가 저수준 리소스 정리를 수행할 수 있는지 여부.
QSqlDriver::MultipleResultSets13드라이버가 일괄 처리 문 또는 저장 프로시저에서 반환된 여러 결과 집합에 액세스할 수 있는지 여부.
QSqlDriver::CancelQuery14드라이버가 실행 중인 쿼리 취소를 허용하는지 여부.

지원되는 기능에 대한 자세한 내용은 Qt SQL 드라이버 문서에서 확인할 수 있습니다.

hasFeature()도 참조하세요 .

enum QSqlDriver::IdentifierType

이 열거형에는 SQL 식별자 유형 목록이 포함되어 있습니다.

Constant설명
QSqlDriver::FieldName0SQL 필드 이름
QSqlDriver::TableName1SQL 테이블 이름

enum QSqlDriver::NotificationSource

이 열거형에는 SQL 알림 소스 목록이 포함되어 있습니다.

Constant설명
QSqlDriver::UnknownSource0알림 소스를 알 수 없습니다.
QSqlDriver::SelfSource1알림 소스가 이 연결입니다.
QSqlDriver::OtherSource2알림 소스가 다른 연결입니다.

enum QSqlDriver::StatementType

이 열거형에는 드라이버가 생성할 수 있는 SQL 문(또는 절) 유형 목록이 포함되어 있습니다.

Constant설명
QSqlDriver::WhereStatement0SQL WHERE 문(예: WHERE f = 5).
QSqlDriver::SelectStatement1SQL SELECT 문(예: SELECT f FROM t).
QSqlDriver::UpdateStatement2SQL UPDATE 문(예: UPDATE TABLE t set f = 1).
QSqlDriver::InsertStatement3SQL INSERT 문(예: INSERT INTO t (f) values (1)).
QSqlDriver::DeleteStatement4SQL DELETE 문(예: DELETE FROM t).

sqlStatement()도 참조하십시오 .

속성 문서

[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy

이 속성은 데이터베이스 연결에 대한 정밀도 정책을 보유합니다.

참고: 정밀도 정책을 설정해도 현재 활성 쿼리에는 영향을 미치지 않습니다.

이 프로퍼티는 Qt 6.8에 도입되었습니다.

액세스 함수:

QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

QSql::NumericalPrecisionPolicy, QSqlQuery::numericalPrecisionPolicy, QSqlDatabase::numericalPrecisionPolicy참조하세요 .

멤버 함수 문서

[explicit] QSqlDriver::QSqlDriver(QObject *parent = nullptr)

주어진 parent 으로 새 드라이버를 생성합니다.

[virtual noexcept] QSqlDriver::~QSqlDriver()

개체를 파괴하고 할당된 모든 리소스를 해제합니다.

[virtual] bool QSqlDriver::beginTransaction()

이 함수는 트랜잭션을 시작하기 위해 호출됩니다. 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 기본 구현은 아무 작업도 수행하지 않고 false 를 반환합니다.

commitTransaction() 및 rollbackTransaction()도 참조하세요 .

[pure virtual] void QSqlDriver::close()

파생 클래스는 데이터베이스 연결을 닫으려면 이 순수 가상 함수를 다시 구현해야 합니다. 성공하면 참을 반환하고 실패하면 거짓을 반환합니다.

open() 및 setOpen()도 참조하세요 .

[virtual] bool QSqlDriver::commitTransaction()

이 함수는 트랜잭션을 커밋하기 위해 호출됩니다. 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 기본 구현은 아무 작업도 수행하지 않고 false 를 반환합니다.

beginTransaction() 및 rollbackTransaction()도 참조하세요 .

[pure virtual] QSqlResult *QSqlDriver::createResult() const

데이터베이스에 빈 SQL 결과를 생성합니다. 파생 클래스는 이 함수를 재구현하고 데이터베이스에 적합한 QSqlResult 객체를 호출자에게 반환해야 합니다.

[virtual] QString QSqlDriver::escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const

데이터베이스 규칙에 따라 identifier 이스케이프된 값을 반환합니다. identifier 은 테이블 이름 또는 필드 이름일 수 있으며, type 에 따라 달라집니다.

기본 구현은 아무 작업도 수행하지 않습니다.

isIdentifierEscaped()도 참조하세요 .

[virtual] QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings = false) const

데이터베이스의 field 값에 대한 문자열 표현을 반환합니다. 이 함수는 예를 들어 INSERT 및 UPDATE 문을 작성할 때 사용됩니다.

기본 구현은 다음 규칙에 따라 문자열로 형식이 지정된 값을 반환합니다:

  • field 가 문자 데이터인 경우 작은따옴표로 묶인 값이 반환되며, 이는 많은 SQL 데이터베이스에 적합합니다. 포함된 작은따옴표 문자는 모두 이스케이프 처리됩니다(작은따옴표 문자 두 개로 대체됨). trimStrings 가 참이면(기본값은 거짓) 필드에서 모든 후행 공백이 잘립니다.
  • field 가 날짜/시간 데이터인 경우 값은 ISO 형식으로 형식이 지정되고 작은따옴표로 묶입니다. 날짜/시간 데이터가 유효하지 않은 경우 "NULL"이 반환됩니다.
  • fieldbytearray 데이터이고 드라이버가 이진 필드를 편집할 수 있는 경우 값의 형식은 16진수 문자열로 지정됩니다.
  • 다른 필드 유형의 경우 해당 값에 대해 toString()이 호출되고 그 결과가 반환됩니다.

QVariant::toString()도 참조하세요 .

[virtual] QVariant QSqlDriver::handle() const

QVariant 로 래핑된 저수준 데이터베이스 핸들을 반환하거나 핸들이 없는 경우 유효하지 않은 변형을 반환합니다.

경고: 이 함수는 사용법을 잘 알고 있는 경우에만 최대한 주의해서 사용하세요.

경고: 연결이 수정되면(예: 연결을 닫는 경우) 여기에 반환된 핸들은 부실 포인터가 될 수 있습니다.

경고: 연결이 아직 열려 있지 않은 경우 핸들은 NULL이 될 수 있습니다.

여기에 반환되는 핸들은 데이터베이스에 따라 다르므로 액세스하기 전에 변형의 유형 이름을 쿼리해야 합니다.

이 예에서는 sqlite에 대한 연결의 핸들을 검색합니다:

QSqlDatabase db = QSqlDatabase::database();
QVariant v = db.driver()->handle();
if (v.isValid() && (qstrcmp(v.typeName(), "sqlite3*") == 0)) {
    // v.data() returns a pointer to the handle
    sqlite3 *handle = *static_cast<sqlite3 **>(v.data());
    if (handle) {
        // ...
    }
}

이 스니펫은 PostgreSQL 또는 MySQL에 대한 핸들을 반환합니다:

if (qstrcmp(v.typeName(), "PGconn*") == 0) {
    PGconn *handle = *static_cast<PGconn **>(v.data());
    if (handle) {
        // ...
    }
}

if (qstrcmp(v.typeName(), "MYSQL*") == 0) {
    MYSQL *handle = *static_cast<MYSQL **>(v.data());
    if (handle) {
        // ...
    }
}

QSqlResult::handle()도 참조하세요 .

[pure virtual] bool QSqlDriver::hasFeature(QSqlDriver::DriverFeature feature) const

드라이버가 feature 기능을 지원하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

일부 데이터베이스는 open()가 있어야 이를 확인할 수 있습니다.

DriverFeature참조하세요 .

[virtual] bool QSqlDriver::isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const

데이터베이스 규칙에 따라 identifier 이 이스케이프되었는지 여부를 반환합니다. identifier 은 테이블 이름 또는 필드 이름일 수 있으며, type 에 따라 달라집니다.

QSqlDriver 서브클래스에서 자체 구현을 제공하려면 이 함수를 다시 구현하세요,

stripDelimiters() 및 escapeIdentifier()도 참조하세요 .

[virtual] bool QSqlDriver::isOpen() const

데이터베이스 연결이 열려 있으면 true 을 반환하고, 그렇지 않으면 false를 반환합니다.

bool QSqlDriver::isOpenError() const

데이터베이스 연결을 여는 동안 오류가 발생하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

QSqlError QSqlDriver::lastError() const

데이터베이스에서 마지막으로 발생한 오류에 대한 정보가 포함된 QSqlError 객체를 반환합니다.

setLastError()도 참조하세요 .

[virtual, since 6.0] int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const

데이터베이스 설정에 따라 식별자 type 의 최대 길이를 반환합니다. 데이터베이스에 최대값이 없는 경우 기본적으로 INT_MAX를 반환합니다.

이 함수는 Qt 6.0에 도입되었습니다.

[signal] void QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

이 신호는 데이터베이스가 드라이버가 구독하는 이벤트 알림을 게시할 때 방출됩니다. name 는 이벤트 알림을 식별하고 source 는 신호 소스를 나타내며 payload 는 알림과 함께 선택적으로 전달되는 추가 데이터를 보유합니다.

subscribeToNotification()도 참조하세요 .

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

numericalPrecisionPolicy를 반환합니다.

참고: 숫자 정밀도 정책 프로퍼티에 대한 게터 함수입니다.

setNumericalPrecisionPolicy()도 참조하세요 .

[pure virtual] bool QSqlDriver::open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString())

파생 클래스는 이 순수 가상 함수를 다시 구현하여 사용자 이름 user, 비밀번호 password, 호스트 host, 포트 port 및 연결 옵션 options 을 사용하여 데이터베이스 db 에서 데이터베이스 연결을 열어야 합니다.

이 함수는 성공하면 참을 반환하고 실패하면 거짓을 반환해야 합니다.

setOpen()도 참조하세요 .

[virtual] QSqlIndex QSqlDriver::primaryIndex(const QString &tableName) const

테이블의 기본 인덱스를 반환합니다 tableName. 테이블에 기본 인덱스가 없는 경우 빈 QSqlIndex 을 반환합니다. 기본 구현은 빈 인덱스를 반환합니다.

[virtual] QSqlRecord QSqlDriver::record(const QString &tableName) const

테이블 tableName 의 필드 이름으로 채워진 QSqlRecord 을 반환합니다. 해당 테이블이 존재하지 않으면 빈 레코드가 반환됩니다. 기본 구현은 빈 레코드를 반환합니다.

[virtual] bool QSqlDriver::rollbackTransaction()

이 함수는 트랜잭션을 롤백하기 위해 호출됩니다. 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 기본 구현은 아무 작업도 수행하지 않고 false 를 반환합니다.

beginTransaction() 및 commitTransaction()도 참조하세요 .

[virtual protected] void QSqlDriver::setLastError(const QSqlError &error)

이 함수는 데이터베이스에서 발생한 마지막 오류( error)의 값을 설정하는 데 사용됩니다.

lastError()도 참조하세요 .

void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

numericalPrecisionPolicyprecisionPolicy 으로 설정합니다.

참고: 속성에 대한 세터 함수 numericalPrecisionPolicy.

numericalPrecisionPolicy()도 참조하세요 .

[virtual protected] void QSqlDriver::setOpen(bool open)

이 함수는 데이터베이스의 열린 상태를 open 로 설정합니다. 파생 클래스는 이 함수를 사용하여 open()의 상태를 보고할 수 있습니다.

open() 및 setOpenError()도 참조하세요 .

[virtual protected] void QSqlDriver::setOpenError(bool error)

이 함수는 데이터베이스의 열린 오류 상태를 error 로 설정합니다. 파생 클래스는 이 함수를 사용하여 open()의 상태를 보고할 수 있습니다. error 이 참이면 데이터베이스의 열기 상태가 닫힘으로 설정됩니다(즉, isOpen()은 false 을 반환합니다).

isOpenError(), open() 및 setOpen()도 참조하세요 .

[virtual] QString QSqlDriver::sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const

rec 의 값을 사용하여 tableName 테이블에 대한 type 유형의 SQL 문을 반환합니다. preparedStatement 이 참이면 문자열에 값 대신 자리 표시자가 포함됩니다.

rec 의 각 필드에 생성된 플래그에 따라 해당 필드가 생성된 문에 포함되는지 여부가 결정됩니다.

이 방법을 사용하면 데이터베이스 종속적인 SQL 언어에 대해 걱정할 필요 없이 테이블을 조작할 수 있습니다. 준비되지 않은 문의 경우 값이 올바르게 이스케이프됩니다.

WHERE 문에서 rec 의 널이 아닌 각 필드는 필드 값과 같다는 필터 조건을 지정하거나, 준비된 경우 자리 표시자를 지정합니다. 그러나 준비 여부와 관계없이 null 필드는 IS NULL 조건을 지정하며 자리 표시자를 도입하지 않습니다. 애플리케이션은 실행 중에 null 필드에 대한 데이터 바인딩을 시도해서는 안 됩니다. 플레이스홀더가 필요한 경우 필드를 널이 아닌 값으로 설정해야 합니다. 또한, 널이 아닌 필드는 동일성 조건을 지정하고 SQL NULL은 그 자체로도 어떤 것과도 같지 않으므로 일반적으로 널을 자리 표시자에 바인딩하는 것은 유용하지 않습니다.

[virtual] QString QSqlDriver::stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const

앞뒤 구분 기호가 제거된 identifier 를 반환하며, identifier 은 테이블 이름 또는 필드 이름일 수 있으며 type 에 따라 달라집니다. identifier 에 선행 및 후행 구분 문자가 없는 경우 identifier 이 수정 없이 반환됩니다.

QSqlDriver 서브클래스에서 자체 구현을 제공하려면 이 함수를 다시 구현하세요,

isIdentifierEscaped()도 참조하세요 .

[virtual] bool QSqlDriver::subscribeToNotification(const QString &name)

이 함수는 데이터베이스에서 이벤트 알림을 구독하기 위해 호출됩니다. name 이벤트 알림을 식별합니다.

성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

이 함수를 호출할 때 데이터베이스가 열려 있어야 합니다. close ()를 호출하여 데이터베이스를 닫으면 구독 중인 모든 이벤트 알림이 자동으로 구독 취소됩니다. 이미 열려 있는 데이터베이스에서 open()를 호출하면 암시적으로 close()가 호출되어 드라이버가 모든 이벤트 알림의 구독을 취소할 수 있습니다.

name 로 식별된 이벤트 알림이 데이터베이스에 게시되면 notification() 신호가 전송됩니다.

자체 QSqlDriver 서브클래스에서 이벤트 알림 지원을 제공하려면 이 함수를 다시 구현하세요,

unsubscribeFromNotification(), subscribedToNotifications() 및 QSqlDriver::hasFeature()도 참조하세요 .

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

현재 구독 중인 이벤트 알림의 이름 목록을 반환합니다.

자체 QSqlDriver 서브클래스에서 이벤트 알림 지원을 제공하려면 이 함수를 다시 구현하세요,

subscribeToNotification() 및 unsubscribeFromNotification()도 참조하세요 .

[virtual] QStringList QSqlDriver::tables(QSql::TableType tableType) const

데이터베이스에 있는 테이블의 이름 목록을 반환합니다. 기본 구현은 빈 목록을 반환합니다.

tableType 인수는 반환할 테이블 유형을 설명합니다. 바이너리 호환성 때문에 문자열에는 QSql::TableTypes 열거형 값이 텍스트로 포함됩니다. 이전 버전과의 호환성을 위해 빈 문자열은 QSql::Tables 로 처리해야 합니다.

[virtual] bool QSqlDriver::unsubscribeFromNotification(const QString &name)

이 함수는 데이터베이스에서 이벤트 알림을 수신 취소하기 위해 호출됩니다. name 이벤트 알림을 식별합니다.

성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

이 함수를 호출할 때 데이터베이스가 열려 있어야 합니다. close () 함수가 호출되면 구독 중인 모든 이벤트 알림의 구독이 자동으로 취소됩니다.

함수를 호출한 후에는 name 으로 식별되는 이벤트 알림이 데이터베이스에 게시될 때 notification() 신호가 더 이상 발생하지 않습니다.

자체 QSqlDriver 서브클래스에서 이벤트 알림 지원을 제공하려면 이 함수를 다시 구현하세요,

subscribeToNotification() 및 subscribedToNotifications()도 참조하세요 .

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.