每个应用都需要或多或少的保存一些数据,当不想用文件保存数据时,最好的选择恐怕就是数据库了。数据库拥有管理数据方便,数据可读性高等优点。那么在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");