• 3889阅读
  • 2回复

[提问]关于数据库打开关闭状态的问题 [复制链接]

上一主题 下一主题
离线txwhhny
 

只看楼主 倒序阅读 楼主  发表于: 2012-10-30
  1. #include <QSqlQuery>
  2. #include <QSqlDatabase>
  3. #include <QSqlError>
  4. #include <QVariant>
  5. #include <QApplication>
  6. #define CONN "test"
  7. void childOpen()
  8. {
  9.     QSqlDatabase m_db;
  10.     if(QSqlDatabase::contains(CONN))
  11.         m_db = QSqlDatabase::database(CONN);
  12.     else
  13.         m_db = QSqlDatabase::addDatabase("QSQLITE", CONN);
  14.     m_db.setDatabaseName("./test.db");
  15.     qDebug("childOpen1 stat:%d", m_db.isOpen());
  16. }
  17. void parentOpen1()
  18. {
  19.     QSqlDatabase m_db;
  20.     if(QSqlDatabase::contains(CONN))
  21.         m_db = QSqlDatabase::database(CONN);
  22.     else
  23.         m_db = QSqlDatabase::addDatabase("QSQLITE", CONN);
  24.     m_db.setDatabaseName("./test.db");
  25.     m_db.open();
  26.     qDebug("parentOpen1 stat:%d", m_db.isOpen());
  27.     //childOpen();     // 注释1:该函数如果调用,childOpen1输出数据库状态为打开。  
  28.     m_db.close();
  29.     //childOpen();     // 注释2:该函数如果调用,childOpen1输出数据库状态为打开,且下面的parentOpen1的数据库打开状态为真    
  30.     qDebug("parentOpen1 stat:%d", m_db.isOpen());
  31. }
  32. int main(int argc, char ** argv)
  33. {
  34.     QApplication app(argc, argv);
  35.     parentOpen1();
  36.     return app.exec();
  37. }


这是实际执行结果:
只执行注释1的话,输出结果:
parentOpen1 stat:1
childOpen1 stat:1
parentOpen1 stat:0

只执行注释2的话,输出结果:
parentOpen1 stat:1
childOpen1 stat:1
parentOpen1 stat:1

2个注释都执行的话,输出结果:
parentOpen1 stat:1
childOpen1 stat:1
childOpen1 stat:1
parentOpen1 stat:1




以下为楼主预想结果:
只执行注释1的话,输出结果:
parentOpen1 stat:1
childOpen1 stat:0
parentOpen1 stat:0

只执行注释2的话,输出结果:

parentOpen1 stat:1
childOpen1 stat:0
parentOpen1 stat:0


2个注释都执行的话,输出结果:
parentOpen1 stat:1
childOpen1 stat:0
childOpen1 stat:0
parentOpen1 stat:0

请教下大家,这是为什么啊



离线txwhhny

只看该作者 1楼 发表于: 2012-10-30
求帮助
离线txwhhny

只看该作者 2楼 发表于: 2012-11-01
没人知道么?
快速回复
限100 字节
 
上一个 下一个