QSqlDatabase文档简要翻译(用法)

来源:互联网 发布:jdk 8u91 windows x32 编辑:程序博客网 时间:2024/05/17 04:23


   部分参考自http://blog.csdn.net/cctv_hu/article/details/6216312

    QSqlDatabase类提供一个通过数据库连接访问数据库的接口。一个QSqlDatabase的实例代表了一个数据库连接。数据库连接通过数据库驱动提供对数据库的访问,数据库驱动继承自QSqlDriver。或者,你可以从QSqlDriver类构建你自己的数据库驱动。QSqlDatabase类提供一个通过数据库连接访问数据库的接口。一个QSqlDatabase的实例代表了一个数据库连接。数据库连接通过数据库驱动提供对数据库的访问,数据库驱动继承自QSqlDriver。或者,你可以从QSqlDriver类构建你自己的数据库驱动。

  你可以创建一个链接(一个QSqlDatabase实例)通过声明其中一个静态的的addDatabase()方法,这个方法令你能使用一个特定的驱动或者其他种类的驱动和命名该链接。一个链接能用它的名字来识别而不是通过它的数据库名来链接。你可以多个连接在同一个数据库。QSqlDatabase 同样支持默认连接的概念,它是无名称的链接。只要在你使用addDatabase()方法的时候不传递链接的名称参数就可以使用默认链接。其后,当你调用任何具有连接名称参数的静态成员函数时,如果你不传递连接名称参数,就会使用默认连接。下面的代码片段展示了如何创建并打开一个默认连接的PostgreSQL 数据库:

<span style="font-size:14px;color:#009900;">QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");    db.setHostName("acidalia");    db.setDatabaseName("customdb");    db.setUserName("mojito");    db.setPassword("J0a1m8");    bool ok = db.open();</span>

   一旦QSqlDatabase 对象被创建,你就要使用setDatabaseName(),setUserName(),setPassword(),setHostName(),setPort(), andsetConnectOptions()等方法设置连接参数。然后使用open()激活与数据库的物理连接,在你使用open之前链接是不能被使用的。

  上面定义的链接会成为一个默认连接,因为我们并没有在addDatabase给他一个链接名称,随后你可以使用不带连接名称的database()方法,

<span style="font-size:14px;color:#009900;">QSqlDatabase db = QSqlDatabase::database();</span>

  QSqlDatabase是一个值类。如果一个一个QSqlDatabase实例的数据库链接发生改变会影响到另外在使用同一的链接的QSqlDatabase实例。在这种情况下应该使用cloneDatabase()在已存在的数据库连接的基础上创建一个独立的链接。

  如果创建多重数据库连接,调用 addDatabase()时,要为每个连接指定不同的名字。调用 database() 方法并传递连接名称来获取该连接。通过调用带有连接名称参数的 removeDatabase() 方法来移除一个连接。当你试图移除一个已经被其他 QSqlDatabase 对象引用的连接时QSqlDatabase会发出警告。你可以使用contain()来查看给出的链接名称是否在链接列表里面。

  当一个连接被确定以后,你可以调用 tables() 方法来获取数据库的数据表列表,调用 primaryIndex() 方法来获取表的主索引,调用 record() 来获取某个表的字段的元信息

注意: 不提倡使用旧的 QSqlDatabase::exec() ,推荐用新的 QSqlQuery::exec() 来代替。

    如果驱动支持事务,用 transation() 开始一个事务,用 commit() 或 rollback() 完成这个事务。用 hasFeature() 询问驱动是否支持事务。注意:当使用事务时,必须在创建查询之前开始事务。

    如果发生错误,lastError() 方法将返回关于该错误的信息。

    通过 drivers() 获取可用的SQL驱动名字列表。用 isDriverAvailable() 来检查某个特定的驱动是否可用。如果你创建了自定义驱动,必须调用registerSqlDriver() 注册它。

  成员方法:

QSqlDatabase::QSqlDatabase()

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

QSqlDatabase::QSqlDatabase(const QSqlDatabase & other)

拷贝构造函数

QSqlDatabase::QSqlDatabase(const QString & type)

这是一个重载的方法,创建一个使用type参数为参考驱动的QSqlDatabase链接,如果驱动不能识别,这个数据库连接不会有任何作用。

驱动类型描述QDB2IBM DB2QIBASEBorland InterBase驱动QMYSQLMySql驱动QOCIOracle接口驱动QODBCODBC驱动QPSQLPostgreSQL 驱动QSQLITESQLite3或以上QSQLITE2SQLite2QTDSSybase

 另外的第三方驱动,包括你自己常规驱动也可以动态地被载入使用

同样可以在 SQL Database Drivers,registerSqlDriver(), drivers()找到.

QSqlDatabase::QSqlDatabase(QSqlDriver * driver)

这是一个重载的功能,使用给出的驱动创建一个数据库连接

QSqlDatabase QSqlDatabase::addDatabase(constQString & type, constQString & connectionName = QLatin1String( defaultConnection ))

创建一个数据库,使用type参数的驱动类型,和connectionName参数的链接名,如果已经存在一个相同名字的链接,这个链接会被移除。

如果type不用正常使用,isValid()会返回false。

如果没有特指连接名称,这个新链接会成为默认连接。

注意:1.如果你添加了一个具有相同名字的链接,这个新的链接会取代旧的,包括它的成员方法。

           2.使用这个链接之前,必须确保已经初始化。


QSqlDatabase QSqlDatabase::cloneDatabase(constQSqlDatabase & other, constQString & connectionName)

复制一个数据库链接,存储名为connectionName,所有的设置跟原来的数据库一样

注意:这个新的链接还没有被open,在使用只是必须调用open()打开链接。

void QSqlDatabase::close()

关闭数据库连接,释放内存资源,同时这个数据库的备份也会受到影响。

bool QSqlDatabase::commit()

确认驱动支持事务的话确定一个数据库事务已经开始,如果操作成功返回true,否则返回false。

QString QSqlDatabase::connectOptions() const

返回链接所使用的链接选项字符串,这个字符串有可能是空的。

QString QSqlDatabase::connectionName() const

返回链接的名字

QStringList QSqlDatabase::connectionNames()

返回一个包含所有链接名字的列表

bool QSqlDatabase::contains(constQString & connectionName = QLatin1String( defaultConnection ))

如果列表中包含有这个数据库连接的名字返回true,否则返回false。

QSqlDatabase QSqlDatabase::database(constQString & connectionName = QLatin1String( defaultConnection ),bool open = true)

返回一个名称与connectionName参数相同的数据库连接,如果没有相匹配则返回一个无效的数据库链接。

QString QSqlDatabase::databaseName() const

返回这个链接的数据库名称

QSqlDriver * QSqlDatabase::driver() const

返回这个数据库连接使用的数据库驱动

QString QSqlDatabase::driverName() const

返回这个链接的驱动名

QStringList QSqlDatabase::drivers()

返回一个包含所有可用的数据库驱动列表

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

在数据库中执行一个SQL语句并返回一个QSqlQuery对象,使用lastError()来捕捉异常信息,如果查询语句是空的,一个无效的查询将会返回而且lastError()不受影响。

QString QSqlDatabase::hostName() const

返回链接的主机名字

bool QSqlDatabase::isDriverAvailable(constQString & name)

显而易见。。驱动有效返回true,否则false

bool QSqlDatabase::isOpen() const

查询是否打开链接

bool QSqlDatabase::isOpenError() const

检测数据库是否打开错误

bool QSqlDatabase::isValid() const

检测数据库是否有效

<span style="font-size:14px;color:#009900;">QSqlDatabase db;qDebug() << db.isValid();    // Returns falsedb = QSqlDatabase::database("sales");qDebug() << db.isValid();    // Returns \c true if "sales" connection existsQSqlDatabase::removeDatabase("sales");qDebug() << db.isValid();    // Returns false</span>

bool QSqlDatabase::open()

打开数据库连接,成功返回true;

bool QSqlDatabase::open(constQString & user, constQString & password)

重载版本,用给出的用户名和密码打开数据库连接

QString QSqlDatabase::password() const

返回链接的密码,如果没有设置密码且链接已经打开,返回一个空字符串。

int QSqlDatabase::port() const

返回链接端口的数目

QSqlIndex QSqlDatabase::primaryIndex(constQString & tablename) const

返回表格的主索引

void QSqlDatabase::removeDatabase(constQString & connectionName)

从列表中移除数据库连接,当然必须是已经打开的

<span style="font-size:14px;color:#ff6666;">// WRONGQSqlDatabase 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</span>

正确做法如下

<span style="font-size:14px;color:#009900;">{    QSqlDatabase db = QSqlDatabase::database("sales");    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);}// Both "db" and "query" are destroyed because they are out of scopeQSqlDatabase::removeDatabase("sales"); // correct</span>

bool QSqlDatabase::rollback()

事务回滚,成功返回true

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

设置数据库的特定选项

 程序例子:

<span style="font-size:14px;color:#009900;">...// MySQL connectiondb.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the serverif (!db.open()) {    db.setConnectOptions(); // clears the connect option string    ...}...// PostgreSQL connectiondb.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connectionsif (!db.open()) {    db.setConnectOptions(); // clear options    ...}...// ODBC connectiondb.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC optionsif (!db.open()) {    db.setConnectOptions(); // don't try to set this option    ...}</span>
还有一系列的set成员方法我们就不提了吧。。。






















  

0 0
原创粉丝点击