Qt SQL-1

Qt SQL是一个必要模块,它提供了对SQL数据库的支持。Qt SQL的APIs被划分为不同层:

  • 驱动层
  • SQL API层
  • 用户接口层

SQL编程指南包含了有关使用Qt SQL开发的信息。

 开始

要在一个项目中启用Qt SQL,添加以下指令到C++文件:

#include 

要链接Qt SQL模块,添加这一行到这个项目文件:

QT += sql

相关信息

这些链接指向API参考材料和相关的页:

  • C++类
  • SQL示例

内容

  1. 命名空间
  2. 详细描述

Qt SQL C++类

为SQL数据库提供了提供了一个驱动层,SQL API层和一个用户接口层。

命名空间

QSql:包含了在整个Qt SQL模块中使用的各种标识符。

头:#include

qmake:QT += sql

类型

enum Location {BeforeFirstRow, AfterLastRow}

enum NumericalPrecisionPolicy{LowPrecisionInt32, LowPrecisionInt64,
    LowPrecisionDouble, HighPrecision}

flags ParamType
enum ParamTypeFlag{In, Out, InOut, Binary}
enum TableType{Tables, SystemTables, Views, AllTypes}

类型文档

enum QSql::Location

这个枚举类型描述了特殊的SQL导航位置:

常数 描述
QSql::BeforeFirstRow -1 在第一个记录钱
QSql::AfterLastRow -2 在最后一个记录后
enum QSql::NumericalPrecisionPolicy

在数据库中的数值可以精度高于它们的C++类型。这个枚举列出了用于在程序中表示这些值的策略。

常数 描述
QSql::LowPrecisionInt32 0x01 强制32位整数值。遇到浮点数值,小数部分被舍弃。
QSql::LowPrecisionInt64 0x02 强制64位整数值。遇到浮点数值,小数部分被舍弃。
QSql::LowPrecisionDouble 0x04 强制double值。这是默认策略。
QSql::HighPrecision 0

将使用字符串保存精度

 注意:如果发生溢出,实际行为是与驱动相关的。Oracle数据库在这种情况就返回一个错误。

enum QSql::ParamTypeFlag
flags QSql::ParamType
常数 描述
QSql::In 0x00000001 这个绑定参数用于写数据到数据库
QSql::Out 0x00000002 这个绑定参数用从数据库获取数据
QSql::InOut In | Out 这个绑定参数用于写数据到数据库;它将在执行查询时被输出数据重写。
QSql::Binary 0x00000004 如果你想要表明被传输的数据是原始的二进制数据,这必须与其它标志之一进行或运算。

ParamType是一个对QFlags的typedef。它存储了ParamTypeFlags值的OR组合。

enum QSql::TableType

这个枚举类型描述了SQL表的类型。

常数 描述
QSql::Tables 0x01 所有表对用户可见
QSql::SystemTables 0x02 内部表被数据库使用
QSql::Views 0x04 所有视图对用户可见
QSql::AllTables 0xff 以上所有

QSqlDatabase 持有数据库的一个连接
QSqlDriverCreator 模板类,它为一个特定驱动类型提供了一个SQL驱动工厂
QSqlDriverCreatorBase 这个基类是用于SQL驱动工厂
QSqlDriver 用于访问特定SQL数据库的抽象基类
QSqlDriverPlugin 用于自动逸QSqlDriver插件的抽象基类
QSqlError

SQL数据库错误信息

QSqlField 操作SQL数据库表和视图中的字段
QSqlIndex 操作和描述数据库索引的功能
QSqlQuery 执行和操作SQL语句的方式
QSqlRecord 封装一个数据库基类
QSqlResult 用于访问来自特定SQL数据库的抽象接口
QSqlQueryModel 用于SQL接口集的只读数据模型
QSqlRelationalDelegate 这个委托用于显示和编辑来自一个QSqlRelationalTableModel的数据
QSqlRelation 存储有关一个SQL外键的信息
QSqlRelationalTableModel 用于单个数据表的可编辑数据模型,带外键支持
QSqlTableModel 用于单个数据表的可编辑数据模型

1、QSqlDataBase类

QSqlDatabase类持有一个数据库的一个连接。

头:#include

qmake:QT += sql

公共成员函数

QSqlDatabase();
QSqlDAtabase(const QSqlDatabase &other);
~QSqlDatabase();

void close();
bool commit();
QString connectOptions() const;
QString connectionName() const;
QString databaseName() const;
QSqlDriver * driver();
QString driverName() const;
QSqlQuery exec(const QString *query = QString()) const;
QString hostName() const;
bool isOpen() const;
bool isOpenError() const;
bool isValid() const;
QSqlError lastError() const;
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
bool open();
bool open(cosnt QString &user, const QString &password);
QString password() const;
int port() const;
QSqlIndex primaryIndex(const QString &tablename) const;
QSqlRecord record(const QString &tablename) const;
void 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;
bool transaction();
QString userName() const;
QSqlDataBase& operator=(const QSqlDatabase &other);

静态公共成员函数

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

保护成员函数

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

详细描述

QSqlDatabase类维护一个数据库的一个连接。

QSqlDatabase类提供了一个用于通过连接访问数据库的接口。QSqlDatabase的一个实例是代表这个连接。这个连接通过其中一个受支持数据库驱动(它派生自QSqlDriver)访问这个数据库。另外,你可以从QSqlDriver派生你自己的数据库驱动。更多信息见如何编写你自己的数据库

通过调用其中一个静态addDatabase()函数创建一个连接(即,一个QSqlDatabase实例),此处(取决于数据库的类型),你指定要使用的驱动或者驱动类型和一个连接名称。一个连接通过其自己的名称识别,而不是它连接到的数据库名称。对一个数据库,你可以有多个连接。QSqlDatabase页支持一个默认连接的概念,它是未命名连接。要创建这个默认连接,当你调用addDatabase()时,不要创建连接名称参数。因此,如果你没有指定连接名称地调用任何静态成员函数,将认为是这个默认连接。以下片段展示了如何创建和打开一个MySQL数据库地默认连接:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("192.168.50.245");
db.setPort(3306);
db.setDatabaseName("mytestDB");
db.setUserName("test");
db.setPassword("@TESTtest");

if (!db.open()){
    qDebug() << "Failed to connect to database";
    qDebug() << db.lastError().text();
}

 一旦创建了QSqlDatabase对象,用setDataBaseName(),  setUserName(),  setPassword(), setHostName(),  serPort()和setConnectionOptions()设置连接参数。接着调用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() 取消一个事务
hasFeture() 检查驱动是否支持事务
lastError() 返回有关上个错误的信息
driver() 返回可用的SQL驱动的名称
isDriverAvailable() 检查一个特定的驱动是否可用
registerSqlDriver() 注册一个自定义的驱动

注意:QSqlDatabase::exec()过时了,替代使用QSqlQuery::exec()。

注意:当使用事务时,在你创建你的请求前,你必须启动这个事务。

成员函数文档

QSqlDatabase::QSqlDatabase()

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

QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)

创建other的一个副本。

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

这是一个被重载的函数。使用由type引用的驱动创建一个QSqlDatabase连接。如果这个type未被识别,数据库连接将没有作用。

当前可用的驱动类型是:

驱动类型 描述
QDB2 IBM DB2
QIBASE Borland Interface Driver
QMYSQL MySQL Driver
QOCI Oracle Call Interface Driver
QODBC ODBC Driver(包括Microsoft SQL Server)
QPSQL PostgreSQL Driver
QSQLITE SQLite version 3或以上
QSQLITE2 SQLite version 2
QTDS Sybase Adaptive Server

其它第三方驱动,保护你自己自定义驱动,可以动态地加载。

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

这是一个被重载地函数。使用指定地驱动创建一个数据库连接。 

QSqlDatabase::QSqlDatabase()

销毁这个对象并且释放任何分配地资源。

注意:当上个连接被销毁时,析构函数隐式地调用了close()来释放这个数据库资源。

//[Static]
QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnect))

使用驱动类型和连接名称connectionName添加一个数据库到数据库连接列表中。如果那已经存在名为connectionName地数据库连接,移除那个连接。数据库连接是由connectionName引用。新被添加地数据库连接被返回。

如果type不可用或者不能被加载,isValid()返回false。

如果没有指定connectionName, 这个新连接成为这个程序地默认连接,并且之后不带连接名称地调用database()将返回这个默认的连接。如果这里提供了一个connectionName,使用database(connectionName)来获取这个连接。

警告:如果你用与一个已有连接相同名称添加了一个连接,新连接替代老的连接。如果你不指定connectionName地调用这个函数多次,默认连接将被替代一次。在使用这个连接前,它必须被初始化,例如,调用setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort()和setConnectionOptions()中地某些或所有,并且最后open()

注意:这个函数是线程安全的。

//[Static]
QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(defaultConnect))

当你想要用你自己实例化的驱动创建一个数据库连接时,这个重载是有用的。它会是你自己的数据库驱动,或者你可能只需要实例化Qt驱动之一。如果你做这件事,推荐你在你的程序中包含驱动代码。例如,你像这样用你自己的QPSQL驱动创建一个PostgreSQL连接:

#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"

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对象所需的代码,认为在你include搜索路径的某个位置有PostgreSQL的头。

记住你必须链接你的程序到数据库的客户端库。确认客户端库在你的链接器的搜索路径中,并且添加这些行到你的.pro文件:

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

描述的方法对所有提供的驱动有效。唯一差别将在驱动构造函数参数中。这是一个Qt包含的驱动,它们的源代码文件和它们的构造函数参数的表格:

驱动 类明 构造函数参数 要包含的文件
QPSQL QPSQLDriver PGconn* connection qsql_psql.cpp
QMYSQL QMYSQLDriver MYSQL *connection qsql_mysql.cpp
QOCI QOCIDriver

OCIEnv *environment, 

OCISvcCtx *serviceContext

qsql_ocl.cpp
QODBC QODBCDriver

SQLHANDLE environment,

SQLHANDLE connection

qsql_odbc.cpp
QDB2 QDB2Driver

SQLHANDLE environment,

SQLHANDLE connection

qsql_db2.cpp
QTDS QTDSDriver

LOGINREC *loginRecord,

DBPROCESS *dbProcess,

const QString &hostName

qsql_tds.cpp
QSQLITE QSQLiteDriver sqlite *connection qsql_sqlite.cpp
QIBASE QIBasseDriver isc_db_handle connection qsql_ibase.cpp

在为内部查询创建新连接构造QTDSDriver时,需要主机名(或者服务名)。这是为了防止在若干QSqlQuery对象被同时使用时,阻塞。

警告:当用一个与已有连接相同连接名称添加一个数据库连接时,使得已有连接被这个新连接替代。

警告:这个SQL框架拥有这个驱动。一定不能删除它。要移除这个连接,使用removeDatabase()。

//Static
QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName);

克隆这个数据库连接other并且用connectionName存储它。来自原先数据库的所有设置,例如,databaseName(), hostName()等被整个复制。如果other是一个无效数据库,什么页不做。返回新创建的数据库连接。

注意:新连接还未被打开。在使用新的连接前,你必须调用open()。

void QSqlDatabase::close();

关闭数据库连接,释放获取的任何资源,并且使得与这个数据库一起使用的任何已有QSqlQuery对象无效。这将页影响这个QSqlDatabase对象的副本。

bool QSqlDatabase::commint()

如果驱动支持事务并且已经启动了一个transaction(),向这个数据库提供一个事务。如果操作成功返回true,否则,它返回false。

注意:对于默写数据库,如果有一个正在使用数据库用于一个SELECT的有效查询,提交将出错。在进行提交前,使得这个查询失效。

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

QString QSqlDatabase::connectOptions() const

返回用于这个连接的连接选项字符串。这个字符串可能为空。

QStringList QSqlDatabase::connectionName()

 返回连接名,它可能是空

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

//[Static]
QStringList QSqlDatabase::connectionNames()

返回一个包含了所有连接名的列表。

注意:这个函数是线程安全的。

//[Static]
QSqlDatabase QSqlDatabase::contains(const QString &connectionName=QLatin1String(defaultConnect))

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

注意:这个函数是线程安全的。

//[Static]
QSqlDatabase QSqlDatabase::database(const QString &connectionName=QLatin1String(defaultConnect), bool open = true)

返回名为connectionName的数据库连接。数据库连接必须已经用addDatabase()添加了。如果open是真(默认),并且数据库连接还不是打开的,现在打开它。如果没有指定connectionName,使用默认连接。如果connectionName未存在在数据库列表中,返回一个无效连接。

注意:这个函数是线程安全的。

QString QSqlDatabase::databaseName() const

返回这个连接的数据库名称,它可能是空的。

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

//[static]
QSqlDriver *QSqlDatabase::driver() const

返回用于访问这个数据库连接的数据库驱动。

//[static]
QSqlDriver *QSqlDatabase::driverName() const

返回这个连接的驱动名称。

[static] QStringList QSqlDatabase::drivers()

返回一个可用数据库驱动的列表。

QSqlQuery QSqlDatabase::exec(const QString &query = QString()) const

对数据库执行一条SQL语句,并且返回一个QSqlQuery对象。使用lastError()获取错误信息。如果query是空,返回一个空的,无效的查询,并且lastError不受影响。

QString QSqlDatabase::hostName() const

返回连接的主机名,它可能是空的。

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

如果名为name的驱动可用,返回true;否则,返回false。

bool QSqlDatabase::isOpen() const

如果数据库连接当前是打开的,返回true,否则返回false。

bool QSqlDatabase::isOpenError() const

如果打开数据库连接时有错误,返回true;否则返回false。通过lastError()函数返回错误信息。

bool QSqlDatabase::isValid() const

如果QSqlDatabase有一个有效驱动,返回true。

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db;
    qDebug() << "Valid: " << db.isValid();

    db = QSqlDatabase::addDatabase("QMYSQL", "firstconnection");
    db.setHostName("192.168.50.245");
    db.setPort(3306);
    db.setDatabaseName("mytestDB");
    db.setUserName("test");
    db.setPassword("@testTEST");
    qDebug() << "Valid: " << db.isValid();

    QSqlDatabase::removeDatabase("firstconnection");
    qDebug() << "Valid: " << db.isValid();
    return a.exec();
}

测试结果:

./dbTest
Valid:  false
Valid:  true
QSqlDatabasePrivate::removeDatabase: connection 'firstconnection' is still in use, all queries will cease to work.
Valid:  false

 

QSqlError QSqlDatabase::lastError() const

返回数据库中上次发生错误的信息。

结合由QSqlQuery::lastError()报告的各自查询中发生错误。

QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const

返回这个数据库连接的当前默认精度策略。

bool QSqlDatabase::open()

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

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

这是一个重载函数。使用指定用户名和密码打开一个数据库连接。成功返回true,否则返回false。使用lastError()获取错误信息。

这个函数不存储传给它的密码,密码被直接传递给了驱动用于打开这个连接并且它接着被丢弃。

QString QSqlDatabase::password() const

返回连接的密码。如果没有用setPassword()设置密码,以及如果在open()中传递了密码,或者没有使用密码,将返回一个空串。

int QSqlDatabase::port() const

返回连接的端口号。如果端口号未被设置,这个值是未定义的。

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

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

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

返回一个QSqlRecord,它由名为tablename的表(视图)中所有字段的名称填充。在这个record中字段出现的顺序是未定义的。如果没有存在这样的表格或视图),返回一个空record。

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

这个函数在SQL框架中注册一个名为name的新SQL驱动。如果你有一个自定义的SQL驱动并且不想要编译它为插件,这是有用的。

示例:

QSqlDatabase::registerSqlDriver("MYDRIVER", new QSqlDriverCreator);
QSqlDAtabase db = QSqlDatabase::addDatabase("MYDRIVER");

QSqlDatabase所有creator指针,因此你一定不要自己删除它。

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

从数据库连接列表删除数据库连接connctionName.

注意:当调用这个函数时,应该没有对此数据库的打开的查询,否则,将发生资源写了泄漏。

示例:

// 错误
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEE", db);
QSqlDatabase::removeDatabase("sales"); // 将输出一条警告

// "db"现在是一个悬着的无效数据库连接
// "query"包含一个无效的结果集

正确的做法是:

{
    QSqlDatabase db = QSqlDatabase::database("sales");
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEE", db);
}
// “db”和"query"被销毁,因为它们超出了作用域
QSqlDatabase::removeDatabase("sales"); // 将输出一条警告

要移除默认连接,可能已经用不指定连接名调用addDatabase()创建了它,通过对由database()返回的数据库调用connectionName()可以获取这个默认连接名。注意,如果默认数据库还未被创建,将返回一个无效的数据库。

注意:这个函数是线程安全的。

bool QSqlDatabase::rollback()

如果驱动支持事务并且已经启动了一个transaction(), 对数据库回滚事务。如果错做成功,返回true,否则返回false。

注意:对于某些数据库,如果有一个正在使用数据库来SELECT的有效查询,返回false。在进行回滚前,使得查询失效。

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

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

设置数据库专用选项。在打开连接前,必须做这件事,否则它无效。另一种可能是关闭连接,调用QSqlDatabase::setConnectOptions(),并且再次打开连接。

选项串的格式是一个选项名称或者option=value对的分号分隔的列表。选项取决于使用的数据库客户端:

Qt SQL-1_第1张图片

Qt SQL-1_第2张图片 

void QSqlDatabase::setDatabaseName(const QString &name);

设置连接的数据库名为name。要起作用,在这个连接被打开前,必须设置数据库名。另外,你可与close()这个连接,设置数据库名,并且接着调用open()。

注意:数据库名不是连接名。连接名必须在连接对象创建时被传递给addDatabase()。对于QOCI(Oracle)驱动,数据库名是TNS服务名称。

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

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QMYSQL", "firstconnection");
    db.setHostName("192.168.50.245");
    db.setPort(3306);
    db.setDatabaseName("mytestDB");
    db.setUserName("test");
    db.setPassword("@testTEST");

    if (!db.open()){
        qDebug() << "Failed to connect to database";
        qDebug() << db.lastError().text();
        return -1;
    }
        else{
        qDebug() << "Connect to database:" << db.connectionName();
        }

    db.close();

    return a.exec();
}

执行结果:

./dbTest
Connect to database: "firstconnection"

没有默认值。

void QSqlDatabase::setHostName(const QString &host)

设置连接的主机名为host。要起作用,在打开这个连接前,必须设置主机名。另外,你可以close()这个连接,设置主机名,并且再调用open()。没有默认值。

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

设置有对这个数据库连接创建的查询使用的默认数值精度策略为precisionPolicy。

注意:不支持用低精度获取数值的驱动将忽略这个精度策略。你可以使用QSqlDriver::hasFeature查找一个驱动是否支持这个特性。

注意:设置默认精度为precisionPolicy不影响任何当前生效的查询。

void QSqlDatabase::setPassowrd(const QString &password)

设置连接的密码为password。要起作用,在打开这个连接前,必须设置这个密码。另外,你可以close()这个连接,设置密码,并且再调用open()。没有默认值。没有默认值。

void QSqlDatabase::setPoint(int port)

设置连接的端口号为port。要起作用,在打开这个连接前,必须设置这个端口号。另外,你可以close()这个连接,设置端口号,并且再调用open()。没有默认值。没有默认值。

void QSqlDatabase::setUserName(const QString &name)

设置连接的用户名为name。要起作用,在打开这个连接前,必须设置这个用户名。另外,你可以close()这个连接,设置用户名,并且再调用open()。没有默认值。没有默认值。

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

返回一个数据库表,系统表和视图的列表,由参数类型指定。

bool QSqlDatabase::transaction()

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

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

分配other给这个对象。

2、QSqlDriverCreator类

QSqlDriverCreator类是一个模板类,它为一个特定的驱动类型提供了一个SQL驱动工厂。

  • 头:#include
  • qmake: QT += sql
  • 继承:QSqlDriverCreateBase

重新实现公共函数

virtual QSqlDriver *createObject() const

1个从QSqlDriverCreatorBase继承的公共函数

详细描述

QSqlDriverCreator类是一个模板类,它为一个特定的驱动类型提供了一个SQL驱动工厂。

QSqlDriverCreator实例化类型T的对象,此处T是一个QSqlDriver子类。

成员函数文档

[virtual]QSqlDriver *QSqlDriverCreator::createObject() const

重新实现QSqlDriverCreatorBase::createObject().

3、QSqlDriverCreatorBase类

QSqlDriverCreatorBase类是一个SQL驱动工厂的基类。

  • 头:#include
  • qmake:QT += sql
  • 由QSqlDriverCreator.继承

公共函数:

virtual ~QSqlDriverCreatorBase()
virtual QSqlDriver * createObject() const = 0

详细描述

QSqlDriverCreatorBase类是一个SQL驱动工厂的基类。

重新实现createObject()返回一个你想要提供的特定QSqlDriver子类的实例。

成员函数

[virtual] ~QSqlDriverCreatorBase()

销毁SQL驱动创建器对象。

[pure virtual] QSqlDriver * createObject() const = 0

重新实现这个函数,返回一个QSqlDriver子类的新实例。

4、QSqlDriver类

QSqlDriver是一个用于访问特定SQL数据库的抽象基类。

  • 头:#include
  • qmake:QT += sql
  • 继承:QObject

公共类型

enum DriverFeature(Transaction, QuerySize, BLOB, ..., Unicode, CancelQuery)
enum IdentifierType{FieldName, TableName}
enum NotificationSource{UnknownSource, SelfSource, OtherSource}
enum StatementType{WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement}

信号

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

从QObject继承的2个信号。

其它继承的成员

  • 从QObject继承1个属性
  • 从QObject继承1个公有槽
  • 从QObject继承1个公有变量
  • 从QObject继承10个静态公有bao成员
  • 从QObject继承2个受保护变量

详细描述

QSqlDriver类是一个用于访问特定SQL数据库的抽象基类。

这个类不应该被直接使用。而是使用QSqlDatabase。

如果你想要创建你自己的SQL驱动,你可以子类化这个类并且重新实现起纯虚函数和你需要的那些虚函数。

成员类型文档

enum QSqlDriver::DriverFeature

这个枚举保护了一张一个驱动会支持的特性的列表。使用hasFeature()查询一个特性是否被支持。

常数 描述
QSqlDriver::Transactions 0 驱动程序是否支持SQL事务
QSqlDriver::QuerySize 1 数据库是否能够报告查询尺寸。注意:某些数据库不支持返回一个查询的大小(即,返回的行数),在这种情况下,QSqlQuery::size()将返回-1
QSqlDriver::BLOB 2 驱动是否支持二进制大对象字段
QSqlDriver::Unicode 3 如果数据库服务器支持Unicode串,驱动是否支持
QSqlDriver::PreparedQueries 4 驱动是否支持准备的查询执行
QSqlDriver::NamedPlaceholders 5 驱动是否支持命名占位符的使用
QSqlDriver::PositionPlaceholders 6 驱动是否支持位置占位符的使用
QSqlDriver::LastInsertId 7 驱动是否支持返回上个被访问行的Id返回。
QSqlDriver::BatchOperations 8 驱动是否支持批操作,见QSqlQuery::execBatch()
QSqlDriver::SimpleLocking 9 驱动是否支持在其它查询对一个表拥有读锁时禁用对此表的写锁。
QSqlDriver::LowPrecisionNumbers 10 驱动是否允许用低精度获取数值
QSqlDriver::EventNotifications 11 驱动是否支持数据库事件通知
QSqlDriver::FinishQuery 12 驱动是否支持在调用QSqlQuery::finish()时进行任何底层源清理。
QSqlDriver::MultipleResultSets 13 驱动是否能访问从批语句或存储过程返回的多个结果集
QSqlDriver::CancelQuery 14 驱动是否允许取消一个正在运行的查询

更多信息,见Qt SQL驱动文档中找到的受支持的特性。

enum QSqlDriver::IdentifierType

这个枚举包含一个SQL标识符类型的列表。

常数 描述
QSqlDriver::FieldName 0 一个SQL字段名
QSqlDriver::TableName 1 一个SQL表名
enum QSqlDriver::NotificationSource
常数 描述
QSqlDriver::UnkownSource 0 通知源未知
QSqlDriver::SelfSource 1 通知源是这个连接
QSqlDriver::OtherSource 2 通知源是另一个连接
enum QSqlDriver::StatementType
常数 描述
QSqlDriver::WhereStatemnt 0 一个SQL WHERE语句(例如:WHERE f= 5)
QSqlDriver::SelectStatement 1 一个SQL SELECT语句(例如:SELECT f FROM t)
QSqlDriver::UpdateStatement 2 一个SQL UPDATE语句(例如:UPDATE TABLE t set f=1)
QSqlDriver::InsertStatement 3 一个SQL INSERT语句(例如:INSERT INTO t (f) values (1))
QSqlDriver::DeleteStatement 4 一个SQL DELETE语句(例如:DELETE FROM t)

成员函数文档 

QSqlDriver::QSqlDriver(QObject *parent = Q_NULLPTR)

用指定父对象创建一个新驱动。

QSqlDriver::~QSqlDriver()

销毁这个对象并且释放任何分配的资源。

[virtual] bool QSqlDriver::beginTransaction()

调用这个函数开始一个事务。如果成功,返回true,否则返回false。默认实现不做任何事情并且返回false。

[pure virtual] void QSqlDriver::close()

为了关闭这个数据库连接,派生类必须重新实现这个纯虚函数。成功返回真,失败返回false。

[pure virtual] void QSqlDriver::commitTransaction()

调用这个函数提交一个事务。如果成功返回true,失败返回false。默认实现什么也不做,并且返回false。

[pure virtual] QSqlDriver::createResult() const

在数据库上创建一个一个空的SQL结果。派生类必须实现这个函数并且返回适合于它们数据库的一个QSqlReslut对象给调用者。

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

返回根据数据库规则的转义的identifier,取决于type,identified可以是一个表名或字段名。

默认实现什么也没有做。

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

返回对应这个数据库field值的字符串表示。例如当构建INSERT和UPDATE语句时,使用这个。

默认实现根据以下规则,返回被格式化为一个字符串的值。

  • 如果field是字符数据,返回值在单引号中被返回,这适合于很多SQL数据库。所有内嵌的单引号字符被转义(用两个单引号字符替代)。如果trimStrings是true(默认是false),从这个字段删除所有尾部空白。
  • 如果field是date/time数据,用ISO格式格式化这个值,并且被包围在单引号中。如果data/time无效,返回"NULL"。
  • 如果field是bytearray数据,并且这个驱动可以编辑二进制字段,这个值被格式化为一个十六进制串。
  • 对于任何其它字段类型,对这个值调用toString(),并且返回这个的结果。

[virtual] QVariant QSqlDriver::handle() const

返回包装在一个QVariant中的底层数据库句柄,如果没有句柄,一个无效变量。

警告:特别小心并且仅在你知道你在做什么时才使用这个。

警告:如果连接被修改(例如,如果你关闭这个连接),这里返回的句柄会变成无效指针。

警告:如果连接还未打开,句柄会是NULL。

这里返回的句柄是依赖数据库的,你在访问变量前应该查询它的类型名。

以下片段返回对应MySQL的句柄:

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    db = QSqlDatabase::addDatabase("QMYSQL", "firstconnection");
    db.setHostName("192.168.50.245");
    db.setPort(3306);
    db.setDatabaseName("mytestDB");
    db.setUserName("test");
    db.setPassword("@testTEST");

    if (!db.open()){
        qDebug() << "Failed to connect to database";
        qDebug() << db.lastError().text();
        return -1;
    }
    else{
        QVariant v = db.driver()->handle();

        if (v.isValid()){
            qDebug() << v.typeName();
        }
    }
    db.close();

    return a.exec();
}


以上代码输出:

./dbTest
MYSQL*

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

如果驱动支持特性teature,返回true,否则返回false。

注意:在能够确定这个钱,某些数据库需要被open()。

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

根据数据库规则,是否返回identifier是否被转义。取决于,identifier可以是一个表名或一个字段名。

如果你想要在你的QSqlDriver子类中提供你自己的实现,重新实现这个函数。

[virtual] bool QSqlDriver::isOpen() const

如果数据库连接打开,返回真,否则返回假。
 

bool QSqlDriver::isOpenError() const

如果打开数据库连接时发生错误,返回true,否则返回false。

QSqlError QSqlDriver::lastError() const

返回包含数据库上次发生错误的信息的QSqlError对象。

[signal] void QSqlDriver::notification(const QString &name)

当数据库提交这个驱动订阅的一个事件通知时,发出这个信号。name标识这个事件通知。

注意:在这个类中重载了信号通知。使用函数指针语法连接这个信号,你必须在一个静态转换中指定这个信号类型,如这个示例所示:

connect(sqlDriver, static_cast(&QSqlDriver::notification), [=](const QString &name){/* ... */})

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

当数据库提供一个驱动订阅的事件通知时,这个信号被发出。name识别事件通知,source表示信号源,payload保存与这个通知一起传递的可选的额外数据。

注意:在这个类中重载信号通知。使用函数指针语法连接这个信号,你必须在静态转换中指定信号类型,如示例中所示:

connect(sqslDriver, static_cast(&QSqlDriver::notification), [=](const QString &name, QSqlDriver::NotificationSource, const QVariant &payload{/* ... */}));

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

返回这个数据库连接的当前默认精度策略。

[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的一个数据库连接。 

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

返回这个表名的主索引。如果这个表不存在主索引,发货一个空的QSqlIndex。默认实现返回一个空的索引。

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

返回用表tableName中字段名称填充的QSqlRecord。如果这样的表不存在,返回一个空的Record。默认实现返回一个空记录。

[virtual] bool QSqlDriver::rollbackTransaction()

这个函数被调用回滚一个事务。如果成功,返回true,否则返回false。默认实现什么也不做并且返回false。

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

这个函数用于设置上次数据库上发生的上次错误error的值。

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

设置这个驱动创建的查询使用的默认数值精度策略为precisionPolicy。

注意:设置默认精度策略为precisionPolicy不影响任何当前生效的查询。

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

这个函数设置数据库的打开状态为open。派生类可以使用这个函数报告open()的状态。

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

这个函数设置数据库的打开错误状态为error。派生类可以使用这个函数报告open()的状态。注意:如果error是true,数据库的打开状态被设置关闭(即,isOpen()返回false)。

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

用来自rec的值返回对应表tableName的一条类型type的SQL语句。如果preparedStatement是true,这个串包含占位符而不是值。

在rec的每个字段中产生的标记确定在产生的语句中是否包含这个字段。

这个方法可以用于操作表格,而不需要担心依赖数据库的SQL本地语言。对于非预备语句,这些值将被合适地转义。

在WHERE语句中,rec地每个非null字段指定等于字段值的过滤条件,或者如果预备的,一个占位符。但无论是否预备,一个null字段指定条件IS NULL并且不再引入占位符。程序在执行中一定不要尝试为null字段绑定数据。如果需要占位符,字段必须被设置为某个非null值。更进一步,由于非null字段指定相等相等条件并且SQL NULL不等于任何东西,甚至自身,绑定一个null为占位符通常无用。

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

返回删除了起使和结尾分隔符的identifier,取决于type,identifiier可以是一个表名或字段名。如果identifier没有起使和结尾分隔字符,返回没有修改的identifier。如果你想要在你自己的QSqlDriver子类中提供你自己的实现,重新实现这个函数。

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

调用这个函数订阅来自数据库的事件通知。name识别事件通知。

如果成功,返回true,否则false。

当这个函数被调用时,数据库必须被打开。通过调用close()关闭了数据库,所有被订阅的事件通知自动被取消订阅。注意,对已经打开的数据库调用open(),可能隐式地引起close()被调用,这将使得驱动程序取消订阅所有来自事件地通知。

当一个由name标识的事件通知通过数据库notifcation()信号被发送而被提交。

如果你想要在你自己的QSqlDriver子类中提供事件通知支持,重新实现这个函数。

[virtual] QStringList QSqlDriver::subcribedToNotifications() const

返回一张当前被订阅的事件通知的名称的列表。

如果你想要在你自己的QSqlDriver子类中提供事件通知支持,重新实现这个函数。

[virtual] QStringList QSqlDriver::tables(QSqlTableType tableType)

返回数据库中一个表名的列表。默认实现返回一个空表。

tableType参数描述了什么样的表类型应该被返回。由于二进制兼容性,字符串包含enum QSql::TableType的值为文本。为了后向兼容,一个空串应该被当成QSql::Tables。

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

调用这个函数取消订阅来自数据库的事件通知。name标识事件通知。

如果成功返回true,否则返回false。

当调用这个函数时,必须打开了数据库。在调用close()函数时,所有订阅的事件通知被自动取消订阅。

在调用这个函数后,当由name标识的事件通知被数据库提交时,不再发出notification()信号。

如果你想要在你自己的QSqlDriver子类中提供事件通知支持,重新实现这个函数。

5、QSqlDriverPlugin类

QSqlDriverPlugin类为自定义QSqlDriver插件提供了一个抽象基类。

头:#include

qmake:QT += sql

继承:QObject

公有函数

QSqlDriverPlugin(QObject *parent = Q_NULLPTR)
~QSqlDriverPlugin()
virtual QSqlDriver * create(const QString &key) = 0

从QObject继承了32个公有函数。

其它继承的成员

  • 从QObject继承了1个属性
  • 从QObject继承了1个公有槽
  • 从QObject继承了2个信号
  • 从QObject继承了1个公有变量
  • 从QObject继承了10个静态公有成员
  • 从QObject继承了9个受保护的函数
  • 从QObject继承了2个受保护的变量

详细描述

QSqlDriverPlugin类为自定义QSqlDriver插件提供了一个抽象类。

SQL驱动插件时一个简单的插件接口,它使得创建你自己的可以被Qt动态加载的SQL驱动插件变得容易。

通过子类化这个基类,实现编写一个SQL插件,重新实现纯虚函数create(),并且用Q_PLUGIN_METADATA()宏导出这个类。示例实现(在源代码发行的plugins/src/sqldrivers子目录)见Qt带的SQL插件。

包含对应插件的源数据的json文件包含了指明了受支持sql驱动的健的列表:

{"Keys" : [ "mysqldriver" ]}

成员函数文档

QSqlDriverPlugin(QObject *parent = Q_NULLPTR)

创建一个SQL驱动插件并且设置父对像为parent。这是由导出这个插件的moc产生的代码自动调用。

~QSqlDriverPlugin()

销毁SQL驱动插件。你一定不要隐式地调用这个。当不再需要一个插件时,Qt自动销毁它。

[pure virtual] QSqlDriver * create(const QString &key) = 0

创建并且返回一个对应名为key的驱动的QSqlDriver对象。驱动key通常是所需驱动的类名。Keys区分大小写的。

6、QSqlError类

QSqlError类提供了SQL数据库错误信息。

头:#include

qmake:QT += sql

公有类型

enum ErrorType{NoError, ConnectionError, StatementError, TransactionError, UnknownError}

详细描述

QSqlError类提供了SQL数据库错误信息。

QSqlError对象提供了数据库专有的错误数据,包含driverText()和databaseText()消息(或者二者以text()连接一起),以及nativeErrorCode()和type()。

成员类型文档

enum QSqlError::ErrorType

这是枚举类型,描述了这个错误所发生的上下文,例如,一个连接错误,一个语句错误等。

常数 描述
QSqlError::NoError 0 无错误发生
QSqlError::ConnectionError 1 连接错误
QSqlError::StatementError 2 SQL语句语法错误
QSqlError::TransactionError 3 事务失败错误
QSqlError::UnknownError 4 未知的错误

成员函数文档

QSqlError::QSqlError(const QString &driverText = QString(), const QString &databaseText = QString(), ErrorType type = NoError, const QString &code = QString)

构建一个包含了驱动错误文本driverText, 数据库特有的错误文本databaseTest,类型type和错误代码code的错误。

QSqlError::QSqlError(const QSqlError &other)

创建一个other的副本。

~QSqlError::QSqlError()

销毁对象并且释放任何分配的资源。

QString QSqlError::databaseText() const

返回如由数据库报告的错误的文本。这可能包含数据库特有的描述;它可以是空的。

QString QSqlError::driverText() const

返回如由数据库报告的错误的文本。这可能包含数据库特有的描述;它可以是空的。

 bool QSqlError::isValid() const

如果设置了错误,返回true,否则false。

示例:

QSqlQueryModel model;
model.setQuery("SELECT * FROM users;")
if (model.lastError().isValid()){
    qDebug() << model.lastError();
}

 QString QSqlError::nativeErrorCode() const

发货数据库特有的错误代码,如果不能确定它,一个空串。

 QString QSqlError::text() const

这是一个快捷函数,它返回连接的databaseText()和driverText()为一个串。

ErrorType QSqlError::type const

返回错误类型,或者如果不能确定类型,-1。

bool QSqlError::operator!=(const QSqlError &other) const

比较other错误的值和这个错误,如果它们不同,返回true。

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

把other错误的值赋给了这个错误。

bool QSqlError::operator==(const QSqlError &other) const

比较other错误的值和这个错误,如果它们相同,返回true。 

7、QSqlField类

QSql类操作SQL数据库表和视图中的字段。

头:#include

qmake:QT += sql

公有类型

enum RequiredStatus {Required, Optional, Unknown}

详细描述

QSqlField字段操作SQL数据库表和视图中的字段。

QSqlField表示数据库表或视图中单列的特性,诸如数据类型和列名。一个字段也包含数据库列的值,它可以被查看或更改。

字段数据值以QVariant被存储。不允许使用一个不兼容的类型。例如:

QQsqlField field("age", QVariant::Int);
field.setValue(QPixmap()); // 错误

但,在可能时,字段将尝试转换某种数据类型为字段数据类型:

QQsqlField field("age", QVariant::Int);
field.setValue(QString("123"));  // 转换QString为int

QSqlField对象在程序代码中很少被显式地创建。它们通常通过已经包含字段类别地QSqlRecords间接地被访问。

QSqlQuery query;
...
QSqlRecord record = query.record();
QSqlField field = record.field("country");

QSqlField对象可以提供有关字段地元数据,例如,它地name(), 变量type(),length(), precision(), defaultValue(), typeID(), 和它的requiredStatus(), isGenerated()和isReadOnly()。可以检查字段的数据查看它是否isNull(),和它的value()。可以用setValue()编辑数据,或用clear()设置为NULL。

成员类型文档

enum QSqlField::RequiredStatus

指定字段是必需的或者可选的。

常数 描述
QSqlField::Required 1 在插入这个字段时,必须指定这个字段
QSqlField::Optional 0 当插入基类时,不是一定要指定这个字段
QSqlField::Unknown -1 数据库驱动不能确定这个字段是必需的或可选的

成员函数文档

QSqlField::QSqlField(const QString &fieldName = QString(), QVariant::Type = QVariant::Invalid)

构建一个变量类型type名为fieldName的空字段。

QSqlField::QSqlField(const QSqlField &other)

构建other的一个副本。

~QSqlField::QSqlField()

销毁这个对象并且释放任何分配的资源。

void QSqlField::clear()

清除这个字段的额值并且设置它为NULL。如果这个字段是只读的,什么也没有发生。

QVariant QSqlField::defaultValue() const

返回这个字段的默认值(它可能是NULL)。

bool QSqlField::isAutoValue() const

如果这个值是由数据库自动产生的,返回true,例如,自增主键值。

注意:当使用ODBC时,由于ODBC API中的限制,isAutoValue()仅被填充于来自通过执行SELECT查询获取的QSqlRecord的QSqlField中。在从QsqlDatabase::record()或QQsqlBase::primaryIndex()返回的QSqlRecord的QSqlField中,它是false。

bool QSqlField::isGenerated() const

如果字段是被生成的,它是true,否则返回false。

bool QSqlField::isNull() const

如果这个字段的值是NULL,返回true;否则返回false。

bool QSqlField::isReadOnly() const

如果这个字段的值是只读,返回true,否则返回false。

bool QSqlField::isValid() const

如果字段的变量类型是有效的,返回true,否则返回false。

int QSqlField::length() const

返回字段的长度。如果返回值是负数,它表示信息从数据库不可得。

QString QSqlField::name() const

返回字段的名称。

int QSqlField::precision() const

返回字段的精度;这只对数值类型有效。它表示信息从数据库不可得。

RequiredStatus QSqlField::requiredStatus() const

如果这是一个必需字段,返回true,否则返回false。如果一个必需字段没有值,INSERT将出错。

void QSqlField::setAutoValue(bool autoVal)

如果autoVal是true,标记这个字段为字段生成的值。

void QSqlField::setDefaultValue(const QVariant &value)

设置用于这个字段的默认值为value。

void QSqlField::setGenerated(bool gen)

设置生成的状态。如果gen为false,对这个字段不产生SQL;否则,Qt类诸如QSqlQueryModel和QSqlTableModel将为这个字段产生SQL。

void QSqlField::setName(const QString &name)

设置字段的名为为name。

void QSqlField::setPrecision(int precsion)

设置字段的精度。这仅影响数值字段。

void QSqlField::setReadOnly(bool readOnly)

设置这个字段的额只读标记。用setValue()不能设置只读字段的值,并且不能用clear()清除为NULL。

void QSqlField::setRequired(bool required)

如果required是true,设置这个字段的必需状态为Required,否则,设置其为Optional。

void QSqlField::setRequiredStatus(RequuiredStatus required)

设置这个字段的必需状态为required。

void QSqlField::setType(QVariant::Type type)

设置字段的变量类型为type。

void QSqlField::setValue(const QVariant &value)

设置字段的值为value。如果字段是只读(isReadOnly()返回true),什么也没有发生。

如果value的数据类型不同于字段的当前数据类型,进行转换它为合适类型的尝试。遇到赋值的情况,这保留字段的数据类型,例如,QString到一个整数数据类型。

QVariant::Type QSqlField::type() const

返回在数据库中存储的字段的类型。注意,实际值可能有不同的类型,用long int或者double存储的太大数值通常用字符串存储,防止精度损失。

QVariant QSqlField::value() const

用QVariant返回字段的值。使用isNull检查这个字段的值是否为NULL。

bool QSqlField::operator!=(const QSqlField &other) const

如果字段不同于other,返回true,否则返回false。

bool QSqlField::operator==(const QSqlField &other) const

如果字段同于other,返回true,否则返回false。 

8、QSqlIndex类

QSqlIndex类提供了操作和描述数据库索引的功能。

头:#incljude

qmake:QT += sql

继承:QSqlRecord

详细描述

QSqlIndex类提供了操作和描述数据库索引的功能。

一个索引指向数据库中单个表或视图。有关组成索引的字段的信息用于产生SQL语句。

成员函数文档

QSqlIndex::QSqlIndex(const QString &cursorname = QString(), const QString &name = QString())

构建一个使用游标名称cursorname和索引名称name的空索引。

QSqlIndex::QSqlIndex(const QSqlIndex &other)

构建other的一个副本。

~QSqlIndex::QSqlIndex()

销毁这个对象并且释放所有分配的资源。

QSqlIndex::append(const QSqlField &field)

追加字段field到所有字段的列表。按增排列序追加这个字段。

QSqlIndex::append(const QSqlField &field, bool desc)

这是一个重载函数。追加字段field到所用字段列表。除非desc是true,否则按升序追加这个字段。 

QString QSqlIndex::cursorName() const

返回与这个索引相关联的游标的名称。

bool QSqlIndex::isDescending(int i) const

如果在这个索引中的字段i是按降序存储,返回true,否则返回false。

QString QSqlIndex::name() const

返回索引的名称。

void QSqlIndex::setCursorName(const QString &cursorName)

设置与这个索引相关联的游标的名称为cursorName.

void QSqlIndex::setDescending(int i, bool desc)

如果desc是true,字段i按降序存储。否则,字段i按升序存储(默认)。如果这个字段不存在,什么也没有发生。

void QSqlIndex::setName(const QString &name)

设置索引的名称为name。

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

设置索引为other。

你可能感兴趣的:(Qt,qt,sql)