En esta página

QSqlDriver Class

La clase QSqlDriver es una clase base abstracta para acceder a bases de datos SQL específicas. Más...

Cabecera: #include <QSqlDriver>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Hereda: QObject

Tipos Públicos

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

Propiedades

Funciones públicas

QSqlDriver(QObject *parent = nullptr)
virtual ~QSqlDriver()
virtual bool beginTransaction()
virtual void close() = 0
virtual bool commitTransaction()
(since 6.9) QString connectionName() const
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)

Señales

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

Funciones protegidas

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

Descripción detallada

Esta clase no debe utilizarse directamente. Utilice QSqlDatabase en su lugar.

Si quieres crear tus propios controladores SQL, puedes subclasificar esta clase y reimplementar sus funciones virtuales puras y aquellas funciones virtuales que necesites. Vea Cómo escribir su propio controlador de base de datos para más información.

Véase también QSqlDatabase y QSqlResult.

Documentación de Tipos de Miembros

enum QSqlDriver::DriverFeature

Este enum contiene una lista de características que puede soportar un controlador. Utilice hasFeature() para consultar si una función está soportada o no. Algunas características dependen del servidor de base de datos, por lo que sólo pueden determinarse correctamente después de que la conexión a la base de datos se haya abierto correctamente con QSqlDatabase::open().

ConstanteValorDescripción
QSqlDriver::Transactions0Si el controlador admite transacciones SQL.
QSqlDriver::QuerySize1Si la base de datos es capaz de informar del tamaño de una consulta. Tenga en cuenta que algunas bases de datos no admiten la devolución del tamaño (es decir, el número de filas devueltas) de una consulta, en cuyo caso QSqlQuery::size() devolverá -1.
QSqlDriver::BLOB2Si el controlador admite campos binarios de objetos grandes.
QSqlDriver::Unicode3Si el controlador admite cadenas Unicode en caso de que el servidor de bases de datos lo haga.
QSqlDriver::PreparedQueries4Si el controlador admite la ejecución de consultas preparadas.
QSqlDriver::NamedPlaceholders5Si el controlador admite el uso de marcadores de posición con nombre.
QSqlDriver::PositionalPlaceholders6Si el controlador admite el uso de marcadores de posición posicionales.
QSqlDriver::LastInsertId7Si el controlador admite la devolución del Id de la última fila tocada.
QSqlDriver::BatchOperations8Si el controlador admite operaciones por lotes, véase QSqlQuery::execBatch()
QSqlDriver::SimpleLocking9Si el controlador no permite un bloqueo de escritura en una tabla mientras otras consultas tienen un bloqueo de lectura en ella.
QSqlDriver::LowPrecisionNumbers10Si el controlador permite obtener valores numéricos con baja precisión.
QSqlDriver::EventNotifications11Si el controlador soporta notificaciones de eventos de la base de datos.
QSqlDriver::FinishQuery12Si el controlador puede realizar una limpieza de recursos de bajo nivel cuando se llama a QSqlQuery::finish().
QSqlDriver::MultipleResultSets13Si el controlador puede acceder a múltiples conjuntos de resultados devueltos por sentencias por lotes o procedimientos almacenados.
QSqlDriver::CancelQuery14Si el controlador permite cancelar una consulta en ejecución.

Puede encontrar más información sobre las características soportadas en la documentación del controladorQt SQL .

Véase también hasFeature().

enum QSqlDriver::IdentifierType

Este enum contiene una lista de tipos de identificadores SQL.

ConstanteValorDescripción
QSqlDriver::FieldName0Un nombre de campo SQL
QSqlDriver::TableName1Un nombre de tabla SQL

enum QSqlDriver::NotificationSource

Este enum contiene una lista de fuentes de notificación SQL.

ConstanteValorDescripción
QSqlDriver::UnknownSource0La fuente de notificación es desconocida
QSqlDriver::SelfSource1La fuente de notificación es esta conexión
QSqlDriver::OtherSource2La fuente de notificación es otra conexión

enum QSqlDriver::StatementType

Este enum contiene una lista de tipos de sentencias (o cláusulas) SQL que el controlador puede crear.

ConstanteValorDescripción
QSqlDriver::WhereStatement0Una sentencia SQL WHERE (por ejemplo, WHERE f = 5).
QSqlDriver::SelectStatement1Una sentencia SQL SELECT (por ejemplo, SELECT f FROM t).
QSqlDriver::UpdateStatement2Una sentencia SQL UPDATE (por ejemplo, UPDATE TABLE t set f = 1).
QSqlDriver::InsertStatement3Una sentencia SQL INSERT (por ejemplo, INSERT INTO t (f) values (1)).
QSqlDriver::DeleteStatement4Una sentencia SQL DELETE (por ejemplo, DELETE FROM t).

Véase también sqlStatement().

Documentación de propiedades

[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy

Esta propiedad contiene la política de precisión para la conexión a la base de datos.

Nota: Establecer la política de precisión no afecta a las consultas actualmente activas.

Esta propiedad se introdujo en Qt 6.8.

Funciones de acceso:

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

Véase también QSql::NumericalPrecisionPolicy, QSqlQuery::numericalPrecisionPolicy, y QSqlDatabase::numericalPrecisionPolicy.

Documentación de las funciones miembro

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

Crea un nuevo controlador con la dirección parent.

[virtual noexcept] QSqlDriver::~QSqlDriver()

Destruye el objeto y libera los recursos asignados.

[virtual] bool QSqlDriver::beginTransaction()

Esta función es llamada para iniciar una transacción. Si tiene éxito, devuelve true, en caso contrario devuelve false. La implementación por defecto no hace nada y devuelve false.

Véase también commitTransaction() y rollbackTransaction().

[pure virtual] void QSqlDriver::close()

Las clases derivadas deben reimplementar esta función virtual pura para cerrar la conexión a la base de datos. Devuelve true en caso de éxito, false en caso de fallo.

Véase también open() y setOpen().

[virtual] bool QSqlDriver::commitTransaction()

Esta función es llamada para confirmar una transacción. Si tiene éxito, devuelve true, en caso contrario devuelve false. La implementación por defecto no hace nada y devuelve false.

Véase también beginTransaction() y rollbackTransaction().

[since 6.9] QString QSqlDriver::connectionName() const

Devuelve el nombre de la conexión a la base de datos por la que se creó el controlador con QSqlDatabase::addDatabase()

Esta función se introdujo en Qt 6.9.

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

Crea un resultado SQL vacío en la base de datos. Las clases derivadas deben reimplementar esta función y devolver al llamante un objeto QSqlResult apropiado para su base de datos.

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

Devuelve el identifier escapado según las reglas de la base de datos. identifier puede ser un nombre de tabla o de campo, dependiente de type.

La implementación por defecto no hace nada.

Véase también isIdentifierEscaped().

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

Devuelve una representación de cadena del valor field para la base de datos. Se utiliza, por ejemplo, al construir sentencias INSERT y UPDATE.

La implementación por defecto devuelve el valor formateado como una cadena de acuerdo con las siguientes reglas:

  • Si field son datos de carácter, el valor se devuelve entre comillas simples, lo cual es apropiado para muchas bases de datos SQL. Cualquier carácter entre comillas simples incrustado se escapa (se sustituye por dos caracteres entre comillas simples). Si trimStrings es verdadero (por defecto es falso), todos los espacios en blanco se eliminan del campo.
  • Si field son datos de fecha/hora, el valor se formatea en formato ISO y se encierra entre comillas simples. Si los datos de fecha/hora no son válidos, se devuelve "NULL".
  • Si field son datos de bytearray, y el controlador puede editar campos binarios, el valor se formatea como una cadena hexadecimal.
  • Para cualquier otro tipo de campo, se llama a toString() sobre su valor y se devuelve el resultado de ésta.

Véase también QVariant::toString().

[virtual] QVariant QSqlDriver::handle() const

Devuelve el manejador de base de datos de bajo nivel envuelto en un QVariant o una variante inválida si no hay manejador.

Advertencia: Utilícelo con sumo cuidado y sólo si sabe lo que está haciendo.

Advertencia: El manejador devuelto aquí puede convertirse en un puntero obsoleto si se modifica la conexión (por ejemplo, si se cierra la conexión).

Atención: El "handle" puede ser NULL si la conexión aún no está abierta.

El manejador devuelto aquí depende de la base de datos, debería consultar el nombre del tipo de la variante antes de acceder a él.

Este ejemplo devuelve el "handle" de una conexión a 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) {
        // ...
    }
}

Este snippet devuelve el handle para PostgreSQL o 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) {
        // ...
    }
}

Véase también QSqlResult::handle().

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

Devuelve true si el controlador soporta la característica feature; en caso contrario devuelve false.

Tenga en cuenta que algunas bases de datos necesitan ser open() antes de que esto pueda determinarse.

Véase también DriverFeature.

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

Devuelve si identifier está escapado de acuerdo con las reglas de la base de datos. identifier puede ser un nombre de tabla o de campo, dependiendo de type.

Reimplemente esta función si desea proporcionar su propia implementación en su subclase QSqlDriver,

Véase también stripDelimiters() y escapeIdentifier().

[virtual] bool QSqlDriver::isOpen() const

Devuelve true si la conexión a la base de datos está abierta; en caso contrario devuelve false.

bool QSqlDriver::isOpenError() const

Devuelve true si se ha producido un error al abrir la conexión a la base de datos; en caso contrario, devuelve false.

QSqlError QSqlDriver::lastError() const

Devuelve un objeto QSqlError que contiene información sobre el último error que se ha producido en la base de datos.

Véase también setLastError().

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

Devuelve la longitud máxima para el identificador type según la configuración de la base de datos. Devuelve INT_MAX por defecto si no hay máximo para la base de datos.

Esta función se introdujo en Qt 6.0.

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

Esta señal se emite cuando la base de datos publica una notificación de evento a la que se suscribe el controlador. name identifica la notificación de evento, source indica la fuente de la señal, payload contiene los datos adicionales que se entregan opcionalmente con la notificación.

Véase también subscribeToNotification().

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

Devuelve la numericalPrecisionPolicy.

Nota: Función Getter para la propiedad numericalPrecisionPolicy.

Véase también 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())

Las clases derivadas deben reimplementar esta función virtual pura para abrir una conexión a una base de datos en la base de datos db, utilizando el nombre de usuario user, la contraseña password, el host host, el puerto port y las opciones de conexión options.

La función debe devolver true en caso de éxito y false en caso de fallo.

Véase también setOpen().

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

Devuelve el índice primario de la tabla tableName. Devuelve un QSqlIndex vacío si la tabla no tiene índice primario. La implementación por defecto devuelve un índice vacío.

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

Devuelve un QSqlRecord poblado con los nombres de los campos de la tabla tableName. Si no existe tal tabla, se devuelve un registro vacío. La implementación por defecto devuelve un registro vacío.

[virtual] bool QSqlDriver::rollbackTransaction()

Esta función es llamada para revertir una transacción. Si tiene éxito, devuelve true, en caso contrario devuelve false. La implementación por defecto no hace nada y devuelve false.

Véase también beginTransaction() y commitTransaction().

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

Esta función se utiliza para establecer el valor del último error, error, que se ha producido en la base de datos.

Véase también lastError().

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

Establece numericalPrecisionPolicy en precisionPolicy.

Nota: Función Setter para la propiedad numericalPrecisionPolicy.

Véase también numericalPrecisionPolicy().

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

Esta función establece el estado abierto de la base de datos en open. Las clases derivadas pueden utilizar esta función para informar del estado de open().

Véase también open() y setOpenError().

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

Esta función establece el estado de error abierto de la base de datos en error. Las clases derivadas pueden utilizar esta función para informar del estado de open(). Observe que si error es verdadero, el estado abierto de la base de datos se establece en cerrado (es decir, isOpen() devuelve false).

Véase también isOpenError(), open(), y setOpen().

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

Devuelve una sentencia SQL de tipo type para la tabla tableName con los valores de rec. Si preparedStatement es verdadero, la cadena contendrá marcadores de posición en lugar de valores.

La bandera generada en cada campo de rec determina si el campo se incluye en la sentencia generada.

Este método puede utilizarse para manipular tablas sin tener que preocuparse por dialectos SQL dependientes de la base de datos. En las sentencias no preparadas, los valores se escaparán correctamente.

En la sentencia WHERE, cada campo no nulo de rec especifica una condición de filtro de igualdad con el valor del campo o, si está preparado, un marcador de posición. Sin embargo, preparado o no, un campo nulo especifica la condición IS NULL y nunca introduce un marcador de posición. La aplicación no debe intentar vincular datos para el campo nulo durante la ejecución. El campo debe establecerse con un valor no nulo si se desea un marcador de posición. Además, dado que los campos no nulos especifican condiciones de igualdad y SQL NULL no es igual a nada, ni siquiera a sí mismo, generalmente no es útil vincular un null a un marcador de posición.

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

Devuelve identifier sin los delimitadores inicial y final. identifier puede ser un nombre de tabla o de campo, en función de type. Si identifier no tiene caracteres delimitadores iniciales y finales, se devuelve identifier sin modificaciones.

Reimplemente esta función si desea proporcionar su propia implementación en su subclase QSqlDriver,

Véase también isIdentifierEscaped().

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

Esta función se ejecuta para suscribirse a notificaciones de eventos de la base de datos. name identifica la notificación del evento.

Si tiene éxito, devuelve true, en caso contrario devuelve false.

La base de datos debe estar abierta cuando se llama a esta función. Cuando se cierra la base de datos llamando a close(), todas las notificaciones de eventos suscritas se cancelan automáticamente. Tenga en cuenta que llamar a open() en una base de datos ya abierta puede provocar implícitamente que se llame a close(), lo que hará que el controlador se dé de baja de todas las notificaciones de eventos.

Cuando una notificación de evento identificada por name es enviada por la base de datos, se emite la señal notification().

Reimplemente esta función si desea proporcionar soporte de notificación de eventos en su propia subclase QSqlDriver,

Véase también unsubscribeFromNotification(), subscribedToNotifications(), y QSqlDriver::hasFeature().

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

Devuelve una lista de los nombres de las notificaciones de eventos a las que se está suscrito actualmente.

Reimplemente esta función si desea proporcionar soporte de notificación de eventos en su propia subclase QSqlDriver,

Véase también subscribeToNotification() y unsubscribeFromNotification().

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

Devuelve una lista con los nombres de las tablas de la base de datos. La implementación por defecto devuelve una lista vacía.

El argumento tableType describe qué tipos de tablas deben devolverse. Debido a la compatibilidad binaria, la cadena contiene el valor del enum QSql::TableTypes como texto. Una cadena vacía debe tratarse como QSql::Tables por compatibilidad con versiones anteriores.

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

Esta función se llama para darse de baja de las notificaciones de eventos de la base de datos. name identifica la notificación del evento.

Si tiene éxito, devuelve true, en caso contrario devuelve false.

La base de datos debe estar abierta cuando se llame a esta función. Todas las notificaciones de eventos suscritas se dan de baja automáticamente cuando se llama a la función close().

Después de llamar a esta función, la señal notification() dejará de emitirse cuando una notificación de evento identificada por name sea publicada por la base de datos.

Reimplemente esta función si desea proporcionar soporte de notificación de eventos en su propia subclase QSqlDriver,

Véase también subscribeToNotification() y subscribedToNotifications().

© 2026 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.