Conexión a bases de datos

Para acceder a una base de datos con QSqlQuery o QSqlQueryModel, cree y abra una o varias conexiones a bases de datos. Las conexiones a bases de datos se identifican normalmente por el nombre de la conexión, no por el nombre de la base de datos. Puede tener varias conexiones a la misma base de datos. QSqlDatabase también admite el concepto de conexión por defecto, que es una conexión sin nombre. Cuando se llama a funciones miembro de QSqlQuery o QSqlQueryModel que toman un argumento de nombre de conexión, si no se pasa un nombre de conexión, se utilizará la conexión por defecto. Crear una conexión por defecto es conveniente cuando su aplicación sólo requiere una conexión a la base de datos.

Observe la diferencia entre crear una conexión y abrirla. Crear una conexión implica crear una instancia de la clase QSqlDatabase. La conexión no es utilizable hasta que se abre. El siguiente fragmento muestra cómo crear una conexión por defecto y luego abrirla:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("bigblue");
    db.setDatabaseName("flightdb");
    db.setUserName("acarlson");
    db.setPassword("1uTbSbAs");
    bool ok = db.open();

La primera línea crea el objeto de conexión, y la última línea lo abre para su uso. En medio, inicializamos alguna información de conexión, incluyendo el database name, el host name, el user name, y el password. En este caso, nos estamos conectando a la base de datos MySQL flightdb en el host bigblue. El argumento "QMYSQL" a addDatabase() especifica el tipo de controlador de base de datos a utilizar para la conexión. El conjunto de controladores de bases de datos incluidos con Qt se muestran en la tabla de controladores de bases de datos soportados.

La conexión en el snippet será la conexión por defecto, porque no pasamos el segundo argumento a addDatabase(), que es el nombre de la conexión. Por ejemplo, aquí establecemos dos conexiones a bases de datos MySQL llamadas "first" y "second":

    QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");
    QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL", "second");

Después de que estas conexiones han sido inicializadas, open() para cada una para establecer las conexiones en vivo. Si open() falla, devuelve false. En ese caso, llame a QSqlDatabase::lastError() para obtener información sobre el error.

Una vez establecida una conexión, podemos llamar a la función estática QSqlDatabase::database() desde cualquier lugar con un nombre de conexión para obtener un puntero a esa conexión de base de datos. Si no pasamos un nombre de conexión, devolverá la conexión por defecto. Por ejemplo:

    QSqlDatabase defaultDB = QSqlDatabase::database();
    QSqlDatabase firstDB = QSqlDatabase::database("first");
    QSqlDatabase secondDB = QSqlDatabase::database("second");

Para eliminar una conexión de base de datos, primero cerramos la base de datos usando QSqlDatabase::close(), y luego la eliminamos usando el método estático QSqlDatabase::removeDatabase().

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