Qt中My SQL重用的问题

1、如果之前(譬如主窗体)已经申明使用过

    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(settingIni.value("hostname").toString());
    db.setDatabaseName(settingIni.value("dbname").toString());
    db.setUserName(settingIni.value("admin").toString());
    db.setPassword(settingIni.value("password").toString());

    if(!db.open())

{}

2、别处(譬如二级三级菜单)二次申明使用

    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(settingIni.value("hostname").toString());
    db.setDatabaseName(settingIni.value("dbname").toString());
    db.setUserName(settingIni.value("admin").toString());
    db.setPassword(settingIni.value("password").toString());

    if(!db.open())

{}


3、别处(譬如二级三级菜单)就会出现问题

Database connection established

QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.


4、解决方法


QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

意思是说,还有某查询引用默认数据库连接"qt_sql_default_connection"。

如果忽略该警告,Qt官方文档里也写了,可能会出现内存泄漏:

db=new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE")); //添加数据库驱动

db->setDatabaseName(sqlpath); //数据库连接命名
if(!db->open()) //打开数据库
{
MyMessageBox myMsg(g_strSysPrintMessage,QObject::tr("打开数据库失败"),g_strMsgBtnOK_CN);
myMsg.exec();
return false; }//删除数据库连接

QStringDBname=db->connectionName();

db->close();
deletedb;
db=NULL;
qDebug()<<"db=="<<DBname;
QSqlDatabase::removeDatabase(DBname);
}
参考资料:http://www.cnblogs.com/codingmylife/archive/2010/04/27/1722404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值