QT数据库连接必备QSqlDatabase

每个应用都需要或多或少的保存一些数据,当不想用文件保存数据时,最好的选择恐怕就是数据库了。数据库拥有管理数据方便,数据可读性高等优点。那么在QT中又怎样使应用与数据库关联呢?!下面来介绍一个QSqlDatabase类(不是操作数据库,只连接数据库,操作数据请看数据库操作):


QSqlDatabase

创建连接

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

同一个database可以被创建多个连接。
目前支持的驱动类型(Qt5.3)
目前支持的驱动类型

设置连接参数

void QSqlDatabase::setDatabaseName(const QString & name)
void QSqlDatabase::setUserName(const QString & name)
void QSqlDatabase::setPassword(const QString & password)
void QSqlDatabase::setHostName(const QString & host)
void QSqlDatabase::setPort(int port)
void QSqlDatabase::setConnectOptions(const QString & options = QString())

以上不一定全部被使用。例:

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

打开数据库连接

bool QSqlDatabase::open()

关闭连接

void QSqlDatabase::close()

注意:调用该函数将使所有正在执行操作的QSqlQuery操作失效。且该函数会影响其副本。

获取连接名

//获取当前对象连接名
QString QSqlDatabase::connectionName() const
//获取所有连接名
QStringList QSqlDatabase::connectionNames() [static]

获取连接对象

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

注意:当open = true时,未打开的连接将会被打开。当connectionName不存在时,将返回无效连接。

复制连接对象

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

删除连接对象

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

删除一个被其他QSqlDatabase对象引用的连接将会发出警告。

检测连接是否存在

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

获取数据库表

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

注意:需要在已连接的情况下使用。

判断连接有效性

bool QSqlDatabase::isValid() const

例:

QSqlDatabase db;
qDebug() << 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

获取数据表主索引

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

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

获取字段元信息

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

当tablename不存在时,返回空QSqlRecord。

开启事务处理

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

注意:需要数据库的支持。

提交事务

bool QSqlDatabase::commit()

注意:需要先开启事务处理。

回滚事务

bool QSqlDatabase::rollback()

注意:需要先开启事务处理。

判断事务可用性

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

获取错误信息

QSqlError QSqlDatabase::lastError() const

获取可用的数据库驱动名列表

QStringList QSqlDatabase::drivers() [static]

驱动名可用性

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

注册用户驱动

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

例:

QSqlDatabase::registerSqlDriver("MYDRIVER",new QSqlDriverCreator<MyDatabaseDriver>);
QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER");

猜你喜欢

转载自blog.csdn.net/yexiangCSDN/article/details/80346834
今日推荐