QSqlDatabase Class

QSqlDatabase 类处理与数据库的连接。更多

头文件: #include <QSqlDatabase>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql

属性

公共函数

QSqlDatabase()
QSqlDatabase(const QSqlDatabase &other)
~QSqlDatabase()
void close()
bool commit()
QString connectOptions() const
QString connectionName() const
QString databaseName() const
QSqlDriver *driver() const
QString driverName() const
QString hostName() const
bool isOpen() const
bool isOpenError() const
bool isValid() const
QSqlError lastError() const
(since 6.8) bool moveToThread(QThread *targetThread)
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
bool open()
bool open(const QString &user, const QString &password)
QString password() const
int port() const
QSqlIndex primaryIndex(const QString &tablename) const
QSqlRecord record(const QString &tablename) const
bool rollback()
void setConnectOptions(const QString &options = QString())
void setDatabaseName(const QString &name)
void setHostName(const QString &host)
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
void setPassword(const QString &password)
void setPort(int port)
void setUserName(const QString &name)
QStringList tables(QSql::TableType type = QSql::Tables) const
(since 6.8) QThread *thread() const
bool transaction()
QString userName() const
QSqlDatabase &operator=(const QSqlDatabase &other)

静态公共成员

QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1StringView(defaultConnection))
QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1StringView(defaultConnection))
QSqlDatabase cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
QSqlDatabase cloneDatabase(const QString &other, const QString &connectionName)
QStringList connectionNames()
bool contains(const QString &connectionName = QLatin1StringView(defaultConnection))
QSqlDatabase database(const QString &connectionName = QLatin1StringView(defaultConnection), bool open = true)
QStringList drivers()
bool isDriverAvailable(const QString &name)
void registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)
void removeDatabase(const QString &connectionName)

保护函数

QSqlDatabase(QSqlDriver *driver)
QSqlDatabase(const QString &type)

详细说明

QSqlDatabase 类提供了通过连接访问数据库的接口。QSqlDatabase 的实例代表连接。该连接通过一个支持的数据库驱动程序访问数据库,这些驱动程序都是从QSqlDriver 派生的。您也可以从QSqlDriver 子类化自己的数据库驱动程序。更多信息,请参阅如何编写自己的数据库驱动程序。QSqlDatabase 实例只能由创建它的线程访问。因此,您必须确保在正确的上下文中创建它们。您也可以使用QSqlDatabase::moveToThread() 更改上下文。

通过调用静态addDatabase() 函数之一来创建连接(即 QSqlDatabase 实例),并在其中指定要使用的驱动程序或驱动程序类型(取决于数据库类型)以及连接名称。连接以其名称而所连接数据库的名称命名。一个数据库可以有多个连接。QSqlDatabase 还支持默认连接的概念,即未命名连接。要创建默认连接,在调用addDatabase() 时不要传递连接名称参数。随后,如果调用任何静态成员函数而不指定连接名称,将假定使用默认连接。下面的代码段展示了如何创建并打开 PostgreSQL 数据库的默认连接:

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("acidalia");
    db.setDatabaseName("customdb");
    db.setUserName("mojito");
    db.setPassword("J0a1m8");
    bool ok = db.open();

创建 QSqlDatabase 对象后,使用setDatabaseName(),setUserName(),setPassword(),setHostName(),setPort() 和setConnectOptions() 设置连接参数。然后调用open() 激活与数据库的物理连接。在打开连接之前,连接是不可用的。

上面定义的连接将是默认连接,因为我们没有给addDatabase() 赋予连接名称。随后,您可以调用database() 而不使用连接名称参数来获取默认连接:

    QSqlDatabase db = QSqlDatabase::database();

QSqlDatabase 是一个值类。通过一个 QSqlDatabase 实例对数据库连接所做的更改将影响代表同一连接的其他 QSqlDatabase 实例。使用cloneDatabase() 可在现有数据库连接的基础上创建一个独立的数据库连接。

警告: 强烈建议您不要将 QSqlDatabase 的副本作为类的成员保留,因为这样会妨碍在关闭时正确清理实例。如果需要访问现有的 QSqlDatabase,应使用database() 进行访问。如果选择使用 QSqlDatabase 成员变量,则需要在删除QCoreApplication 实例之前删除该变量,否则可能导致未定义的行为。

如果创建了多个数据库连接,请在调用addDatabase() 时为每个连接指定一个唯一的连接名称。使用带有连接名称的database() 可以获取该连接。使用带有连接名称的removeDatabase() 可删除连接。如果尝试删除其他 QSqlDatabase 对象引用的连接,QSqlDatabase 会输出警告。使用contains() 查看给定的连接名称是否在连接列表中。

一些实用方法:
tables()返回表列表
primaryIndex()返回表的主索引
record()返回表字段的元信息
transaction()启动事务
commit()保存并完成一个事务
rollback()取消事务
hasFeature()检查驱动程序是否支持事务
lastError()返回上次出错的信息
drivers()返回可用 SQL 驱动程序的名称
isDriverAvailable()检查特定驱动程序是否可用
registerSqlDriver()注册自定义驱动程序

注意: 使用事务时,必须在创建查询之前启动事务。

另请参阅 QSqlDriver,QSqlQueryQt SQL以及线程和 SQL 模块

属性文档

[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy

此属性保存在此数据库连接上创建的查询所使用的默认数值精度策略。

注意:不支持以低精度获取数值的驱动程序将忽略精度策略。可以使用QSqlDriver::hasFeature() 查找驱动程序是否支持此功能。

注意:将默认精度策略设置为precisionPolicy 不会影响任何当前活动查询。

此属性在 Qt 6.8 中引入。

访问函数:

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

另请参阅 QSql::NumericalPrecisionPolicy,QSqlQuery::numericalPrecisionPolicy, 和QSqlDriver::numericalPrecisionPolicy

成员函数文档

QSqlDatabase::QSqlDatabase()

创建一个空的、无效的 QSqlDatabase 对象。使用addDatabase(),removeDatabase() 和database() 可获取有效的 QSqlDatabase 对象。

[explicit protected] QSqlDatabase::QSqlDatabase(QSqlDriver *driver)

这是一个重载函数。

使用给定的driver 创建数据库连接。

[explicit protected] QSqlDatabase::QSqlDatabase(const QString &type)

这是一个重载函数。

创建一个 QSqlDatabase 连接,该连接使用type 引用的驱动程序。如果type 未被识别,数据库连接将不起作用。

当前可用的驱动程序类型如下

驱动程序类型描述
QDB2IBM DB2
QIBASEBorland InterBase 驱动程序
QMYSQLMySQL 驱动程序
QOCIOracle 调用接口驱动程序
QODBCODBC 驱动程序(包括 Microsoft SQL Server)
QPSQLPostgreSQL 驱动程序
QSQLITESQLite 3 或更高版本
QMIMERMimer SQL 11 或更高版本

可动态加载其他第三方驱动程序,包括您自己的自定义驱动程序。

另请参阅 SQL 数据库驱动程序registerSqlDriver() 和drivers()。

QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)

创建other 的副本。

[noexcept] QSqlDatabase::~QSqlDatabase()

销毁对象并释放已分配的资源。

注意: 销毁最后一个连接时,析构函数会隐式调用close() 释放数据库连接。

另请参阅 close()。

[static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1StringView(defaultConnection))

使用驱动程序type 和连接名称connectionName 在数据库连接列表中添加一个数据库。如果已经存在名为connectionName 的数据库连接,则会删除该连接。

数据库连接将以connectionName 引用。新添加的数据库连接将被返回。

如果type 不可用或无法加载,isValid() 将返回false

如果未指定connectionName ,新连接将成为应用程序的默认连接,以后调用database() 而不使用连接名称参数将返回默认连接。如果此处提供了connectionName ,则使用 database(connectionName) 获取连接。

警告 如果添加的连接与现有连接名称相同,新连接将取代旧连接。如果在未指定connectionName 的情况下多次调用此函数,默认连接将被替换。

例如,调用setDatabaseName(),setUserName(),setPassword(),setHostName(),setPort(), 和setConnectOptions() 中的部分或全部,最后调用open() 。

注意:此函数是线程安全的

另请参阅 database(),removeDatabase(), 以及线程和 SQL 模块

[static] QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1StringView(defaultConnection))

这是一个重载函数。

当您想使用自己实例化的driver 创建数据库连接时,这个重载函数就非常有用。它可能是你自己的数据库驱动程序,也可能只是你自己需要实例化的 Qt 驱动程序之一。如果这样做,建议在应用程序中包含驱动程序代码。例如,您可以使用自己的 QPSQL 驱动程序创建 PostgreSQL 连接,如下所示:

PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield");
QPSQLDriver *drv = new QPSQLDriver(con);
QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection
QSqlQuery query;
query.exec("SELECT NAME, ID FROM STAFF");

上述代码设置了一个 PostgreSQL 连接,并实例化了一个 QPSQLDriver 对象。接下来,调用 addDatabase() 将连接添加到已知连接中,以便Qt SQL 类可以使用它。当使用连接句柄(或句柄集)实例化驱动程序时,Qt 假定您已经打开了数据库连接。

注意: 我们假定qtdir 是安装 Qt 的目录。这将调入使用 PostgreSQL 客户端库和实例化 QPSQLDriver 对象所需的代码,前提是你在包含搜索路径中的某个地方有 PostgreSQL 头文件。

请记住,您必须根据数据库客户端库链接您的应用程序。请确保客户端库在链接器的搜索路径中,并在.pro 文件中添加类似这样的行:

unix:LIBS += -lpq
win32:LIBS += libpqdll.lib

所述方法适用于所有提供的驱动程序。唯一不同的是驱动程序构造函数参数。以下是 Qt 附带的驱动程序、源代码文件及其构造函数参数表:

驱动程序类名构造函数参数包含的文件
QPSQLQPSQLDriverPGconn *连接qsql_psql.cpp
QMYSQLQMYSQLDriverMYSQL *连接qsql_mysql.cpp
QOCIQOCID 驱动程序OCIEnv *environment, OCISvcCtx *serviceContextqsql_oci.cpp
QODBCQODBCDriverSQLHANDLE 环境、SQLHANDLE 连接qsql_odbc.cpp
QDB2QDB2SQLHANDLE 环境、SQLHANDLE 连接qsql_db2.cpp
QSQLITEQSQLiteDriversqlite *连接qsql_sqlite.cpp
QMIMERQMIMERSQLDriverMimerSession * 连接qsql_mimer.cpp
QIBASEQIBASE 驱动程序isc_db_handle connectionqsql_ibase.cpp

警告: 添加与现有连接名称相同的数据库连接会导致现有连接被新连接替换。

警告:SQL 框架会占用 SQL 框架拥有driver 的所有权。不得删除该连接。要删除连接,请使用removeDatabase() 。

另请参阅 drivers()。

[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)

克隆数据库连接other 并将其存储为connectionName 。原始数据库中的所有设置,如databaseName(),hostName() 等,都会被复制过来。如果other 是无效数据库,则不会执行任何操作。返回新创建的数据库连接。

注意: 新连接尚未打开。在使用新连接之前,必须调用open() 。

注意:此函数是可重入的

[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QString &other, const QString &connectionName)

这是一个重载函数。

克隆数据库连接other 并将其存储为connectionName 。原始数据库中的所有设置,如databaseName(),hostName() 等,都会被复制过来。如果other 是无效数据库,则不会执行任何操作。返回新创建的数据库连接。

注意: 新连接尚未打开。在使用新连接之前,必须调用open() 。

在将另一个线程中的数据库克隆为other 所代表的数据库所使用的线程时,此重载非常有用。

void QSqlDatabase::close()

关闭数据库连接,释放获取的任何资源,并使数据库中使用的任何现有QSqlQuery 对象失效。

这也将影响该QSqlDatabase 对象的副本。

另请参阅 removeDatabase()。

bool QSqlDatabase::commit()

如果驱动程序支持事务且transaction() 已启动,则向数据库提交事务。如果操作成功,则返回true 。否则返回false

注意: 对于某些数据库,如果有一个active query 正在使用数据库SELECT ,提交将失败并返回false 。请在提交前查询inactive

调用lastError() 获取错误信息。

另请参阅 QSqlQuery::isActive()、QSqlDriver::hasFeature() 和rollback()。

QString QSqlDatabase::connectOptions() const

返回此连接使用的连接选项字符串。字符串可以为空。

另请参阅 setConnectOptions()。

QString QSqlDatabase::connectionName() const

返回连接名称,可能为空。

注意: 连接名称不是database name

另请参阅 addDatabase() 。

[static] QStringList QSqlDatabase::connectionNames()

返回包含所有连接名称的列表。

注意:此函数是线程安全的

另请参阅 contains(),database() 和线程与 SQL 模块

[static] bool QSqlDatabase::contains(const QString &connectionName = QLatin1StringView(defaultConnection))

如果数据库连接列表包含connectionName ,则返回true ;否则返回false

注意:此函数是线程安全的

另请参阅 connectionNames(),database(), 以及线程和 SQL 模块

[static] QSqlDatabase QSqlDatabase::database(const QString &connectionName = QLatin1StringView(defaultConnection), bool open = true)

返回名为connectionName 的数据库连接。该数据库连接必须已通过addDatabase() 添加。如果open 为 true(默认值),且数据库连接尚未打开,则会立即打开。如果未指定connectionName ,则使用默认连接。如果connectionName 不存在于数据库列表中,则返回无效连接。

注意:该函数是线程安全的

另请参阅 isOpen() 和线程与 SQL 模块

QString QSqlDatabase::databaseName() const

返回连接的数据库名称,可能为空。

注意: 数据库名称不是连接名称。

另请参阅 setDatabaseName()。

QSqlDriver *QSqlDatabase::driver() const

返回用于访问数据库连接的数据库驱动程序。

另请参阅 addDatabase() 和drivers()。

QString QSqlDatabase::driverName() const

返回连接的驱动程序名称。

另请参阅 addDatabase() 和driver()。

[static] QStringList QSqlDatabase::drivers()

返回所有可用数据库驱动程序的列表。

另请参见 registerSqlDriver()。

QString QSqlDatabase::hostName() const

返回连接的主机名;可能为空。

另请参阅 setHostName()。

[static] bool QSqlDatabase::isDriverAvailable(const QString &name)

如果存在名为name 的驱动程序,则返回true ;否则返回false

另请参阅 drivers() 。

bool QSqlDatabase::isOpen() const

如果当前数据库连接已打开,则返回true ;否则返回false

bool QSqlDatabase::isOpenError() const

如果打开数据库连接出错,则返回true ;否则返回false 。可使用lastError() 函数获取错误信息。

bool QSqlDatabase::isValid() const

如果QSqlDatabase 有有效的驱动程序,则返回true

示例

QSqlDatabasedbqDebug() << db.isValid();    // Returns false

db=QSqlDatabase::database("sales");qDebug() << db.isValid();    // Returns \c true if "sales" connection exists

QSqlDatabase::removeDatabase("sales");qDebug() << db.isValid();    // Returns false

QSqlError QSqlDatabase::lastError() const

返回数据库最后一次出错的信息。

与单个查询同时发生的故障由QSqlQuery::lastError() 报告。

另请参阅 QSqlErrorQSqlQuery::lastError()。

[since 6.8] bool QSqlDatabase::moveToThread(QThread *targetThread)

更改QSqlDatabase 及其相关驱动程序的线程亲和性。函数成功执行后,将返回true 。事件处理将继续在targetThread 中进行。

在此操作过程中,必须确保没有QSqlQuery 绑定到此实例,否则QSqlDatabase 将不会被移动到给定的线程,函数将返回false

由于相关驱动程序源于QObject ,因此将QObject 移动到另一个线程的所有约束也适用于该函数。

此函数在 Qt 6.8 中引入。

另请参阅 QObject::moveToThread() 和Threads 以及SQL 模块

QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const

返回数值精度策略。

注: numericalPrecisionPolicy 属性的获取函数。

另请参阅 setNumericalPrecisionPolicy().

bool QSqlDatabase::open()

使用当前连接值打开数据库连接。成功时返回true ,否则返回false 。错误信息可通过lastError() 获取。

另请参阅 lastError()、setDatabaseName()、setUserName()、setPassword()、setHostName()、setPort() 和setConnectOptions()。

bool QSqlDatabase::open(const QString &user, const QString &password)

这是一个重载函数。

使用给定的user 名称和password 打开数据库连接。成功时返回true ,否则返回false 。错误信息可通过lastError() 函数获取。

该函数不会存储所给密码。相反,密码会直接传递给驱动程序用于打开连接,然后被丢弃。

另请参见 lastError()。

QString QSqlDatabase::password() const

返回连接的密码。如果未使用setPassword() 设置密码,如果在调用open() 时给出了密码,或者没有使用密码,则将返回空字符串。

另请参阅 setPassword()。

int QSqlDatabase::port() const

返回连接的端口号。如果未设置端口号,则返回未定义的值。

另请参阅 setPort()。

QSqlIndex QSqlDatabase::primaryIndex(const QString &tablename) const

返回表tablename 的主索引。如果不存在主索引,则返回空QSqlIndex

注意: 如果创建表格时没有加引号,某些驱动程序(如QPSQL驱动程序)可能会要求以小写字母传递tablename 。有关详细信息,请参阅Qt SQL 驱动程序文档。

另请参阅 tables() 和record()。

QSqlRecord QSqlDatabase::record(const QString &tablename) const

返回一个QSqlRecord ,其中包含名为tablename 的表(或视图)中所有字段的名称。字段在记录中出现的顺序未定义。如果不存在此类表(或视图),则返回空记录。

注意: 如果表在创建时没有加引号,某些驱动程序(如QPSQL驱动程序)可能会要求以小写字母传递tablename 。有关详细信息,请参阅Qt SQL 驱动程序文档。

[static] void QSqlDatabase::registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)

此函数在 SQL 框架中注册一个名为name 的新 SQL 驱动程序。如果你有一个自定义的 SQL 驱动程序,但不想将其编译成插件,这个函数就很有用。

示例

QSqlDatabase::registerSqlDriver("MYDRIVER", new QSqlDriverCreator<QSqlDriver>);
QVERIFY(QSqlDatabase::drivers().contains("MYDRIVER"));
QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER");
QVERIFY(db.isValid());

QSqlDatabase 将获得 指针的所有权,因此不得自行删除。creator

另请参见 drivers().

[static] void QSqlDatabase::removeDatabase(const QString &connectionName)

从数据库连接列表中删除数据库连接connectionName

警告: 调用此函数时,数据库连接上不应有打开的查询,否则会发生资源泄漏。

举例说明:

// WRONG
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db" is now a dangling invalid database connection,
// "query" contains an invalid result set

正确的操作方法:

{
    QSqlDatabase db = QSqlDatabase::database("sales");
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correct

要删除默认连接(该连接可能是在调用addDatabase() 时创建的,且未指定连接名称),可以在database() 返回的数据库上调用connectionName() 来获取默认连接名称。请注意,如果尚未创建默认数据库,则将返回无效数据库。

注意:该函数是线程安全的

另请参阅 database(),connectionName(), 以及线程和 SQL 模块

bool QSqlDatabase::rollback()

如果驱动程序支持事务,且transaction() 已启动,则回滚数据库中的事务。如果操作成功,则返回true 。否则返回false

注意: 对于某些数据库,如果有一个active query 正在使用数据库SELECT ,则回滚将失败并返回false 。请在执行回滚之前查询inactive

调用lastError() 获取错误信息。

另请参阅 QSqlQuery::isActive()、QSqlDriver::hasFeature() 和commit()。

void QSqlDatabase::setConnectOptions(const QString &options = QString())

设置特定于数据库的options 。这必须在打开连接之前完成,否则不会有任何效果。另一种方法是关闭连接,调用 QSqlDatabase::setConnectOptions(),然后再次open() 连接。

options 字符串的格式是一个分号分隔的选项名称或选项=值对列表。这些选项取决于所使用的数据库客户端,并在SQL 数据库驱动程序页面中对每个插件进行了说明。

示例

db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the server
if (!db.open()) {
    db.setConnectOptions(); // clears the connect option string
    // ...
}
// ...
// PostgreSQL connection
db.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connections
if (!db.open()) {
    db.setConnectOptions(); // clear options
    // ...
}
// ...
// ODBC connection
db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC options
if (!db.open()) {
    db.setConnectOptions(); // don't try to set this option
    // ...
}
}

有关不同选项的更多信息,请参阅客户端库文档。

另请参阅 connectOptions().

void QSqlDatabase::setDatabaseName(const QString &name)

将连接的数据库名称设置为name 。数据库名称必须连接opened之前设置才能生效。或者,也可以close() 连接,设置数据库名称,然后再次调用open() 。

注意: 数据库名称不是连接名称。连接名称必须在创建连接对象时传递给addDatabase() 。

对于 QSQLITE 驱动程序,如果指定的数据库名称不存在,那么它将为您创建文件,除非设置了 QSQLITE_OPEN_READONLY 选项。

此外,还可以将name 设置为":memory:" ,这样就会创建一个临时数据库,该数据库仅在应用程序运行期间可用。

对于 QOCI(Oracle)驱动程序,数据库名称是 TNS 服务名称。

对于 QODBC 驱动程序,name 可以是 DSN、DSN 文件名(在这种情况下,文件必须有.dsn 扩展名)或连接字符串。

例如,Microsoft Access 用户可以使用以下连接字符串直接打开.mdb 文件,而不必在 ODBC 管理器中创建 DSN 条目:

// ...
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
    // success!
}
// ...

没有默认值。

另请参阅 databaseName()、setUserName()、setPassword()、setHostName()、setPort()、setConnectOptions() 和open()。

void QSqlDatabase::setHostName(const QString &host)

将连接的主机名设置为host 。主机名必须连接opened之前设置才能生效。或者,也可以close() 连接,设置主机名,然后再次调用open() 。

没有默认值。

另请参阅 hostName()、setUserName()、setPassword()、setDatabaseName()、setPort()、setConnectOptions() 和open()。

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

numericalPrecisionPolicy 设置为precisionPolicy

注: 属性numericalPrecisionPolicy 的设置函数。

另请参阅 numericalPrecisionPolicy() 。

void QSqlDatabase::setPassword(const QString &password)

将连接密码设置为password 。密码必须连接opened之前设置才能生效。或者,您可以close() 连接,设置密码,然后再次调用open() 。

没有默认值。

警告: 此函数在 Qt 中以纯文本形式存储密码。请使用将密码作为参数的open() 调用来避免这种行为。

另请参阅 password()、setUserName()、setDatabaseName()、setHostName()、setPort()、setConnectOptions() 和open()。

void QSqlDatabase::setPort(int port)

将连接的端口号设置为port 。端口号必须连接opened之前设置才能生效。或者,您可以close() 连接,设置端口号,然后再次调用open() 。

没有默认值。

另请参阅 port()、setUserName()、setPassword()、setHostName()、setDatabaseName()、setConnectOptions() 和open()。

void QSqlDatabase::setUserName(const QString &name)

将连接的用户名设置为name 。用户名必须连接opened之前设置才能生效。或者,也可以close() 连接,设置用户名,然后再次调用open() 。

没有默认值。

另请参阅 userName()、setDatabaseName()、setPassword()、setHostName()、setPort()、setConnectOptions() 和open()。

QStringList QSqlDatabase::tables(QSql::TableType type = QSql::Tables) const

返回参数type 指定的数据库表、系统表和视图的列表。

另请参阅 primaryIndex() 和record()。

[since 6.8] QThread *QSqlDatabase::thread() const

返回指向相关QThread 实例的指针。

此函数在 Qt 6.8 中引入。

bool QSqlDatabase::transaction()

如果驱动程序支持事务,则开始数据库事务。如果操作成功,则返回true 。否则返回false

另请参阅 QSqlDriver::hasFeature()、commit() 和rollback()。

QString QSqlDatabase::userName() const

返回连接的用户名;可能为空。

另请参阅 setUserName()。

QSqlDatabase &QSqlDatabase::operator=(const QSqlDatabase &other)

为该对象指定other

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