QSqlDatabase 连接 cloneDatabase()

来源:互联网 发布:中信国安 大数据 编辑:程序博客网 时间:2024/05/18 02:10
  Qt中的QSqlDatabase类表示一个数据库的连接。

    数据库连接的创建通过静态方法addDatabase来实现,在创建时可以给数据库连接指定一个名称(ConnectionName),如果不指定名称也可以,会创建一个默认连接。如:

[cpp] view plaincopy
  1. QSqlDatabase a = QSqlDatabase::addDatabase("QMYSQL""YourName");  
  2. QSqlDatabase b = QSqlDatabase::addDatabase("QMYSQL");  

这里会创建两个数据库连接,一个名为“YourName”, 另一个没有指定名称,称之为默认连接(Default Connection)[注意:默认数据库连接的名称不一定是空的,可以通过database().connectionName()来得到默认数据库连接的名称]。在创建数据库连接时发现已经有相同名称的连接存在,原来的连接会删除并重新创建一个新连接。

    数据库连接创建后,通过一些setXXX方法给此连接定义主机名,数据库名,用户名,密码等属性,然后执行open函数创建实际的物理连接,在没有执行open之前是无法执行查询操作的。

    Qt中的数据库以连接名来区分的,通过database方法可以获得在前面已经创建的连接,而相同名称的连接实际是同一个连接,如:

[cpp] view plaincopy
  1. QSqlDatabase c = QSqlDatabase::database("YourName");  
  2. QSqlDatabase d = QSqlDatabase::database("YourName");  
  3. QSqlDatabase e = QSqlDatabase::database();  
  4. QSqlDatabase f = QSqlDatabase::database("UnCreated");  

这里的c和d都和前面的a一样,指向的是同一个连接,当对象d的参数改变后(如调用setUserName),c和a的属性会同时变化。而调用database方法如果忽略连接名时, 则会返回已创建的默认连接,就是说e和b时一样的连接。当调用QSqlDatabase::database时此连接并不存在(没有在调用前首先创建),那么返回的是一个无效连接(如f)。

    QSqlDatabase::cloneDatabase()提供了复制数据库连接的方法,它返回与源对象不同的一个新的连接,但他们指向的物理数据库仍然是相同的。注意:返回的新连接必须先执行open操作才可使用。这也说明了Qt中允许多个QSqlDatabase连接到同一个数据库。

    contains方法可以查询是否已经建立了相同名称的连接。

0 0