Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QT5.9.1 connect MySQL5.7.18
QtWS25 Last Chance

QT5.9.1 connect MySQL5.7.18

Scheduled Pinned Locked Moved Solved General and Desktop
qsqldatabasemac os xmysqlconnection
12 Posts 3 Posters 3.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Slane
    wrote on 25 Aug 2017, 07:48 last edited by Slane
    #3

    you need to create a deeper scoop
    like :

    // deeper scoop
    {
        db = QSqlDatabase::addDatabase("QMYSQL","ConnectionName");
        db.setHostName("127.0.0.1");
        db.setPort(3306);
        db.setUserName("root");
        db.setPassword("lulu168168");
        db.setDatabaseName("student");
    }
    QSqlDatabase::removeDatabase("ConnectionName");
    

    and it's may work

    L 1 Reply Last reply 25 Aug 2017, 09:09
    0
    • L LuAria
      25 Aug 2017, 06:12

      I have finally used OT to connect MySQL successfully yesterday.
      However, when I ran the project, it wraned me that

      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.

      I used

      this->db = QSqlDatabase::addDatabase("QMYSQL");
      this->db.setHostName("127.0.0.1");
      this->db.setPort(3306);
      this->db.setUserName("root");
      this->db.setPassword("lulu168168");
      this->db.setDatabaseName("student");

      in many places.
      Is that led to the warning?
      Thanks you.

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 25 Aug 2017, 08:37 last edited by
      #4

      @LuAria said in QT5.9.1 connect MySQL5.7.18:

      in many places

      Why? There is even no need to have this db variable. Just use the default connection and get it when needed using

      QSqlDatabase db = QSqlDatabase::database();
      

      And set up the database only once.
      Currently you create many connections which is just waste of resources.
      See http://doc.qt.io/qt-5/qsqldatabase.html

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      L 1 Reply Last reply 25 Aug 2017, 09:17
      1
      • S Slane
        25 Aug 2017, 07:48

        you need to create a deeper scoop
        like :

        // deeper scoop
        {
            db = QSqlDatabase::addDatabase("QMYSQL","ConnectionName");
            db.setHostName("127.0.0.1");
            db.setPort(3306);
            db.setUserName("root");
            db.setPassword("lulu168168");
            db.setDatabaseName("student");
        }
        QSqlDatabase::removeDatabase("ConnectionName");
        

        and it's may work

        L Offline
        L Offline
        LuAria
        wrote on 25 Aug 2017, 09:09 last edited by
        #5

        @Slane Thanks, I will have a try.

        1 Reply Last reply
        0
        • J jsulm
          25 Aug 2017, 08:37

          @LuAria said in QT5.9.1 connect MySQL5.7.18:

          in many places

          Why? There is even no need to have this db variable. Just use the default connection and get it when needed using

          QSqlDatabase db = QSqlDatabase::database();
          

          And set up the database only once.
          Currently you create many connections which is just waste of resources.
          See http://doc.qt.io/qt-5/qsqldatabase.html

          L Offline
          L Offline
          LuAria
          wrote on 25 Aug 2017, 09:17 last edited by
          #6

          @jsulm Sorry it's my mistake. Maybe I cannot express myself very well.
          I wrote many cpps on one project. And I wrote that code on even every cpp.
          So I meant whether I wrote that code so many times led to the warning tip.

          J 1 Reply Last reply 25 Aug 2017, 10:21
          0
          • L LuAria
            25 Aug 2017, 09:17

            @jsulm Sorry it's my mistake. Maybe I cannot express myself very well.
            I wrote many cpps on one project. And I wrote that code on even every cpp.
            So I meant whether I wrote that code so many times led to the warning tip.

            J Offline
            J Offline
            jsulm
            Lifetime Qt Champion
            wrote on 25 Aug 2017, 10:21 last edited by
            #7

            @LuAria Yes, this is what I mean: there is no need to initialize same database connection several times in different places (different cpp files). Do it once and then get the connection where you need it like I shown.
            The warnings you get are most probably caused by this problem: you have many active connections.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            L 2 Replies Last reply 25 Aug 2017, 12:30
            1
            • J jsulm
              25 Aug 2017, 10:21

              @LuAria Yes, this is what I mean: there is no need to initialize same database connection several times in different places (different cpp files). Do it once and then get the connection where you need it like I shown.
              The warnings you get are most probably caused by this problem: you have many active connections.

              L Offline
              L Offline
              LuAria
              wrote on 25 Aug 2017, 12:30 last edited by
              #8

              @jsulm Thanks.
              I think I get your point.
              But how can I do it once and get the connection.(Is there a special code to get the connection?)
              Should I define a global variable?
              The other hand, should I use ~.close() and QSqlDatabase::database()
              after using the database. I haven't use that two codes before?
              Thank you very much!

              J 1 Reply Last reply 25 Aug 2017, 12:37
              0
              • L LuAria
                25 Aug 2017, 12:30

                @jsulm Thanks.
                I think I get your point.
                But how can I do it once and get the connection.(Is there a special code to get the connection?)
                Should I define a global variable?
                The other hand, should I use ~.close() and QSqlDatabase::database()
                after using the database. I haven't use that two codes before?
                Thank you very much!

                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 25 Aug 2017, 12:37 last edited by jsulm
                #9

                @LuAria Did you read the link I posted?
                I even copy/pasted the line to get the connection:

                QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
                db.setHostName("acidalia");
                db.setDatabaseName("customdb");
                db.setUserName("mojito");
                db.setPassword("J0a1m8");
                bool ok = db.open();
                
                // Then somewhere else, where you need to use the connection
                QSqlDatabase db = QSqlDatabase::database();
                

                No need for any global variable!
                Where to initialize the connection and where to close it depends on your design. You can do it in main:

                int main()
                {
                    QApplication app(...);
                    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
                    db.setHostName("acidalia");
                    db.setDatabaseName("customdb");
                    db.setUserName("mojito");
                    db.setPassword("J0a1m8");
                    bool ok = db.open();
                    MainWindow *mainWindow = new MainWindow();
                    mainWindow->show();
                    bool exitStatus = app.exec();
                    // Here close the connection
                    return exitStatus;
                }
                

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                2
                • J jsulm
                  25 Aug 2017, 10:21

                  @LuAria Yes, this is what I mean: there is no need to initialize same database connection several times in different places (different cpp files). Do it once and then get the connection where you need it like I shown.
                  The warnings you get are most probably caused by this problem: you have many active connections.

                  L Offline
                  L Offline
                  LuAria
                  wrote on 25 Aug 2017, 12:38 last edited by
                  #10

                  @jsulm
                  I mean should I initialize same database connection once on one cpp, and then when I need using, I can only use the code
                  QSqlDatabase db = QSqlDatabase::database("QMYSQL", "connectionName");
                  to operate on the database?

                  J 1 Reply Last reply 25 Aug 2017, 12:40
                  0
                  • L LuAria
                    25 Aug 2017, 12:38

                    @jsulm
                    I mean should I initialize same database connection once on one cpp, and then when I need using, I can only use the code
                    QSqlDatabase db = QSqlDatabase::database("QMYSQL", "connectionName");
                    to operate on the database?

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 25 Aug 2017, 12:40 last edited by jsulm
                    #11

                    @LuAria Yes, this is what I'm saying.
                    To be sure: you do not have to initialize the connection in every cpp file! Just do it ONCE in your project.
                    You should really read the documentation which I mentioned before - it actually describes this.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    L 1 Reply Last reply 25 Aug 2017, 12:55
                    0
                    • J jsulm
                      25 Aug 2017, 12:40

                      @LuAria Yes, this is what I'm saying.
                      To be sure: you do not have to initialize the connection in every cpp file! Just do it ONCE in your project.
                      You should really read the documentation which I mentioned before - it actually describes this.

                      L Offline
                      L Offline
                      LuAria
                      wrote on 25 Aug 2017, 12:55 last edited by
                      #12

                      @jsulm Thanks a lot!
                      Sorry for my miss on the link.
                      I will try it.

                      1 Reply Last reply
                      0

                      12/12

                      25 Aug 2017, 12:55

                      • Login

                      • Login or register to search.
                      12 out of 12
                      • First post
                        12/12
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved