出现这个告警是因为打开了多个db而没有及时关闭,网上搜了答案是使用完了执行

QSqlDatabase::removeDatabase(m_connectionName);

泄漏的问题有所改善,但点快了仍然有问题,研究了自己的代码才发现,原来自己每次 query时都open一下,即使每次查完后都关闭也来不及的。

将open 和 close函数放在构造和析构中执行;问题解决;

openSQL

void Worker::openDatabase()
{
QDateTime dateTime = QDateTime::currentDateTime();
QString m_dbName = "zzz";
m_connectionName = "m_dbName";
m_connectionName += dateTime.toString("_yyyyMMdd_hhmmss"); m_db = QSqlDatabase::addDatabase("QMYSQL", m_connectionName);
if (!m_db.isValid()) {
qDebug()<<"openDatabase not valid";
return ;
} m_db.setHostName("localhost");
m_db.setUserName("root");
m_db.setPassword("root");
m_db.setDatabaseName(m_dbName); if (!m_db.open()) {
qDebug()<<"openDatabase not open";
return ;
}
m_query = new QSqlQuery(m_db);
}

closeSQL

void Worker::closeDatabase()
{
if(m_query != NULL )
{
delete m_query;
m_query = NULL;
} if (m_db.isValid()) {
if (m_db.isOpen())
m_db.close();
m_db = QSqlDatabase::database("", false);
QSqlDatabase::removeDatabase(m_connectionName);
}
qDebug()<<"closed;";
}

最后是工作函数

void Worker::slot1()
{
QString str = "delete from test where id > 300000 ";
QString str1 = "UPDATE test SET content = 'Checked' WHERE content = 'Wilson' ";
QString str2 = "update test set content = 'zero.' where content > '10000' "; qDebug()<<"3 slots1 : "<<QThread::currentThreadId();
tmpTime.start();
m_db.transaction();
for (int i = ; i < ; i++ )
{
QString str3 = QString("insert into test(content) values('[Checked]')");
m_query->exec(str3);
globalVar++;
}
m_query->exec(str1);
m_query->exec(str2);
m_query->exec(str); m_db.commit();
qDebug()<<"Time Elapsed: "<<tmpTime.elapsed()<<" ms"; #if 0
while(m_query->next()) //query.next()指向查找到的第一条记录,然后每次后移一条记录
{
int ele0 = m_query->value().toInt();
QString ele1 =m_query->value().toString();
QString ele2 = m_query->value().toString();
qDebug() << ele0 <<ele1 <<ele2 ;
}
#endif qDebug()<<"query done.";
emit sig1(); }

1, Developing utilities.

2, Wellknown linuxc

3,. wellknown qt

===================================

compile mysql for qt

'qt_sql_default_connection' is still in use的更多相关文章

  1. QT基本使用

    安装方法: ubuntu12.04下安装QT方法:http://blog.csdn.net/xsl1990/article/details/8299756 输入以下命令: sudo apt-get i ...

  2. 解析Qt4.7.3编译MySql数据库驱动,存中文乱码、过滤转义字符问题

    问题:使用QSqlDataBase类建立连接MySql数据库驱动加载失败 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available ...

  3. 【原创】<Debug> “duplicate connection name”

    [Problem] duplicate connection name [Solution] 在Qt上使用SQLite的时候,如果第二次使用QSqlDatabase::addDatabase()方式时 ...

  4. 【原创】连接数据库MySQL,读取、显示、修改数据

    /* Time: 2017.01.02 —— 2017.01.04 * Author: WJ * Function:连接数据库,从数据库中读取图片并显示(已成功) */ [参考链接] MySQL存入图 ...

  5. 在Qt中使用SQLite数据库

    前言 SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统. Qt5以上版本可以直接使用SQLite(Qt自带驱动). 用法 1 准备 引入 ...

  6. 很好的QSqlDatabase问题说明,关于连接错误(转)

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

  7. Qt+数据库

    前言支持内置数据库: 一.sqlite 1.在头文件中声明数据库对象 QSqlDatabase db; 2.在构造函数中定义对象(最好这样定义,因为对于db来说只需要addDatabase一次,否则多 ...

  8. Qt中使用QSqlDatabase::removeDatabase()的正确方法 good

    如果你用过Qt的QSqlDatabase的话,多半会对下面的警告信息感兴趣: QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_defau ...

  9. Qt 操作SQLite数据库

    项目中通常需要采用各种数据库(如 Qracle.SQL Server.MySQL等)来实现对数据的存储.查询等功能.下面讲解如何在 Qt 中操作 SQlite 数据库. 一.SQLite 介绍 Sql ...

随机推荐

  1. oracle 查询死锁

    --查询死锁 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked ...

  2. promise、resolve、reject、拦截响应

    Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性.其核心是,promise是一个带有then()函数的对象. 使用promise机 ...

  3. 使用WCF实现消息推送

    1.协议 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  4. golang C相互调用带参数

    test.h #ifndef __TEST_H__ #define __TEST_H__ void SetFunc(char* str); extern void InternalFunc(char* ...

  5. java文件的读写程序代码

    package textopen; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutp ...

  6. IntricCondition和expliciteCondition比较

    IntricCondition 和 expliciteCondition 的区别 与 intrinsicLoc和expliciteLock的区别很相似, expliciteCondition提供了更多 ...

  7. Delphi 文件拷贝

    function DoCopyDir(sDirName:String;sToDirName:String):Boolean;var hFindFile:Cardinal; t,tfile:String ...

  8. 咏南中间件增加WEBSOCKET支持

    咏南中间件增加WEBSOCKET支持

  9. [C#]读取指定路径的配置文件[转]

    ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename = @"C:\App.c ...

  10. sharepoint 2013工具

    caml designer 2013 生成caml工具 http://camlbuilder.codeplex.com/ 设计工具 CamlDesigner2013 爬网工具 HtmlAgilityP ...