catalog
QSqlDatabase是引用计数, removeDatabase
看一个错误代码
{
' 此时, 我们保证, QSqlDatabase::database( "abc") 这个数据库连接, 是: 打开了的 '
QSqlDatabase db = QSqlDatabase::database( "abc");
' 当我们想, 释放 这个数据库连接 '
db.close();
QSqlDatabase::removeDatabase( "abc");
}
看起来, 好像是正确的…
但是, removeDatabase
要求, 这个数据库连接, 他的 引用计数, == 1
;
但是, 你QSqlDatabase db = QSqlDatabase::database( "abc")
后, 此时, 是有2个引用!!!
所以, 这是错误的!!
正确做法是:
{
{
QSqlDatabase db = QSqlDatabase::database( "abc");
}
' 当我们想, 释放 这个数据库连接 '
QSqlDatabase::database( "abc").close();
QSqlDatabase::removeDatabase( "abc");
}
QSqlQuery
insert
如果这个记录已经存在,那么重复插入, exec
会返回 false
Version——————
overview
QT SQL模块提供了一个【与平台无关】【与数据库无关】的访问SQL数据库的接口
/ QT都是通过一个【模块】来提供对某种【功能】的支持,比如对于数据库功能 就对应SQL模块
/ 所谓模块,即QT在他里面写了很多的类
/ 引入一个模块, 在项目文件.pro里 添加【QT += sql】
驱动层
驱动层是为【数据库】与【SQL接口层】提供了桥梁
QT的SQL模块是独立于数据库的,所以所有的数据库代码都在【数据库驱动程序】中
/ SQL模块中属于驱动层的类有: QSqlDriver、QSqlResult
QSqlDatabase::drivers() 得到所有的数据库驱动程序
SQl接口层
SQL接口层提供了对数据库的访问
有:QSqlDatabase,QSqlQuery,QSqlError,QSqlField,QSqlIndex,QSqlRecord
' QSqlDatabase创建数据库的连接,这个连接通过【数据库驱动程序QSqlDriver】来访问数据库 '
QSqlDatabase对象
xx.db文件 -> ("xx_conn1"连接名)-> xx_db_1
-> xx_db_2
注意,xx_db_1 和 xx_db_2 都是通过"xx_conn1"这个连接名,连接到的数据库xx.db文件!!
QSqlQuery query1(xx_db_1), query2(xx_db_2);
/ 即2个SqlQuery,通过同一个“xx_conn1"连接名, 来操作xx.db文件
/ 虽然,xx_db_1 和 xx_db_2 是两个不同的对象,但因为他俩的连接名一样
/ 即他俩都是addDatabase("SQLITE",