• 8977阅读
  • 5回复

QT与mysql长时间连线【已解决】 [复制链接]

上一主题 下一主题
离线ker704334
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-22
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —

qt与mysql长时间建立连线问题

以下为建立连线代码

mySqlDatabase = new QSqlDatabase();
*vod_serverDatabase = QSqlDatabase::addDatabase("QMYSQL", "serverDatabase");
serverDatabase->setHostName("localhost");
serverDatabase->setDatabaseName("serverData");
serverDatabase->setUserName("root");
//serverDatabase->setConnectOptions("CLIENT_INTERACTIVE=31536000");
if (!serverDatabase->open())
{
    //serverDatabase->setConnectOptions();
    QSqlError sqlError;
    sqlError = serverDatabase->lastError();
    qDebug() << "sqlError = " << sqlError;
    qDebug() << "error number = " << sqlError.number();
}

以上代码之中,原本想设置serverDatabase->setConnectOptions("CLIENT_INTERACTIVE=31536000");
但是会出现debug信息QMYSQLDriver::open: Illegal connect option value 'CLIENT_INTERACTIVE=31536000'

建立后,如果qt长时间不动作(约经过一个晚上不动作)
qt似乎就会与mysql断线
是否有些参数可以设置延长连线时间?

我有更改过mysql server内的系统变量 intercavite=31536000
确定有更改成功,但是没有效果
[ 此帖被ker704334在2010-03-30 09:14重新编辑 ]
离线fox1987
只看该作者 1楼 发表于: 2010-03-26
好像是看到过有长连接的,。。。
但是根据lz描述的情况,
你完全可以下次使用的时候再连接,因为你不是一直用的。。
离线aaaaa007

只看该作者 2楼 发表于: 2010-03-26
mysql 默认好像是8个小时没动作就自动断开,这和Qt没关系
楼主想要长时间保证数据库连接不断开,而又不对数据库做任何动作
比较理想的做法是  有动作前判断db的isOpen()状态 如果是false则open() 这个动作执行完后close()
还有一个很傻的办法     比如说隔一个小时执行一次查询命令,这样mysql就不会自动断开了
离线yangfanxing
只看该作者 3楼 发表于: 2010-03-26
引用第2楼aaaaa007于2010-03-26 09:42发表的  :
mysql 默认好像是8个小时没动作就自动断开,这和Qt没关系
楼主想要长时间保证数据库连接不断开,而又不对数据库做任何动作
比较理想的做法是  有动作前判断db的isOpen()状态 如果是false则open() 这个动作执行完后close()
还有一个很傻的办法     比如说隔一个小时执行一次查询命令,这样mysql就不会自动断开了

如果是这样的话,谁说不是好办法,呵呵。。。
PHPWind好恶心。。。不想看这种界面。。。
离线ker704334
只看该作者 4楼 发表于: 2010-03-26
隔一段时间查询似乎是个好方法

因为
qt对mysql有时候需要很频繁的读写
如果每次动作完都colse下次再open
怕会造成时间上的延迟

但有时情况是一段时间都没有读写动作
所以才想说要一直保持连线

谢谢提供意见!
离线ker704334
只看该作者 5楼 发表于: 2010-03-30
设定qt与mysql长时间连线方法
在mysql设定档内指定两个变量的值
interactive_timeout
wait_timeout

加上
interactive_timeout=31536000
wait_timeout=31536000
设定是为365天(单位为秒)
快速回复
限100 字节
 
上一个 下一个