Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. SOLVED Qt 5.1 ios How to Bundle and use SQLite database in application
Forum Updated to NodeBB v4.3 + New Features

SOLVED Qt 5.1 ios How to Bundle and use SQLite database in application

Scheduled Pinned Locked Moved Mobile and Embedded
28 Posts 9 Posters 21.9k Views 1 Watching
  • 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.
  • J Offline
    J Offline
    jraichouni
    wrote on last edited by
    #13

    Tried it, and Xcode fails with below error. Did you try to build it for iOS Simulator?
    @
    Undefined symbols for architecture i386:
    "qt_static_plugin_qsqlite()", referenced from:
    StaticqsqlitePluginInstance::StaticqsqlitePluginInstance() in main.o
    ld: symbol(s) not found for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    @
    Used as you proposed:
    @

    sqlite_on_ios.pro

    TEMPLATE = app
    QT += qml quick sql
    QTPLUGIN += qsqlite
    QMAKE_INFO_PLIST += Info.plist
    SOURCES += main.cpp
    RESOURCES += main.qrc
    cache()
    @

    My main.cpp:
    @
    // main.cpp
    #include <QGuiApplication>
    #include <QQuickView>
    #include <QString>
    #include <QtPlugin>

    Q_IMPORT_PLUGIN(qsqlite)
    #include <QSqlDatabase>

    int main(int argc, char *argv[]) {
    QGuiApplication *app = new QGuiApplication(argc, argv);
    // QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "xa_db");
    QQuickView *view = new QQuickView;
    view->setSource(QUrl("qrc:///main.qml"));
    view->setResizeMode(QQuickView::SizeRootObjectToView);
    view->show();
    return app->exec();
    }
    @

    1 Reply Last reply
    0
    • S Offline
      S Offline
      syfy323
      wrote on last edited by
      #14

      I am using a recent version of Qt 5.2.0-dev snapshot (in the title you are writing you are using 5.1).
      For iOS development you should stick to 5.2.0 instead of < 5.2.0.

      edit: yes, I did - works for Mac, iOS Sim and on my iPhone.

      1 Reply Last reply
      0
      • J Offline
        J Offline
        jraichouni
        wrote on last edited by
        #15

        I am using "Qt 5.2.0 (official release)":http://download.qt-project.org/official_releases/qt/5.2/5.2.0/qt-mac-opensource-5.2.0-ios-x86_64-offline.dmg

        I did not create the thread.

        A very short but complete mini project .pro file & main.cpp would help.

        I mean an example, which runs at your computer. I would launch qmake only to get the .xcodeproject directory to test that.

        1 Reply Last reply
        0
        • S Offline
          S Offline
          syfy323
          wrote on last edited by
          #16

          [quote author="jraichouni" date="1389032658"]I am using "Qt 5.2.0 (official release)":http://download.qt-project.org/official_releases/qt/5.2/5.2.0/qt-mac-opensource-5.2.0-ios-x86_64-offline.dmg

          I did not create the thread.[/quote]

          Oh, sorry.

          drop this from your file:
          Q_IMPORT_PLUGIN(qsqlite)

          edit for your edit:

          [quote author="jraichouni" date="1389032658"]
          A very short but complete mini project .pro file & main.cpp would help.

          I mean an example, which runs at your computer. I would launch qmake only to get the .xcodeproject directory to test that.[/quote]

          I already did - the code above works as your main() content.

          1 Reply Last reply
          0
          • J Offline
            J Offline
            jraichouni
            wrote on last edited by
            #17

            It runs!
            I am a bit confused, as the "Plug & paint example":http://qt-project.org/doc/qt-4.8/tools-plugandpaint.html uses that macro.

            But many thanks for your reply and help!!

            Really interesting would be to be able to use the SQLite Function "load_extension" which is omitted in Standard Qt build.

            1 Reply Last reply
            0
            • S Offline
              S Offline
              syfy323
              wrote on last edited by
              #18

              [quote author="jraichouni" date="1389033119"]It runs!
              I am a bit confused, as the "Plug & paint example":http://qt-project.org/doc/qt-4.8/tools-plugandpaint.html uses that macro.

              But many thanks for your reply and help!![/quote]

              You're welcome.

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mac131
                wrote on last edited by
                #19

                "A very short but complete mini project .pro file & main.cpp would help.
                I mean an example, which runs at your computer. I would launch qmake only to get the .xcodeproject directory to test that."

                I just start to use QT 5.2 (with iOS even more) a mini exemple project with all files would be great

                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  jraichouni
                  wrote on last edited by
                  #20

                  Hi!

                  Take the example in the current thread.

                  The important things to consider are:

                  .pro file:
                  @
                  QT += sql
                  ios:QTPLUGIN += qsqlite

                  deploy the database file via something like:

                  databases.files = ../../src/data/xp-apt.sqlite
                  ios: databases.path = Documents
                  macx: databases.path = Contents/Resources
                  QMAKE_BUNDLE_DATA += databases

                  note, that the path databases.files is relative to the cwd, in which

                  the process qmake runs

                  @

                  The class implementing the initialisation/ access to the db needs to do the following for instance:
                  @
                  #include <QtSql>
                  (...)

                  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "some_name");
                  QSqlDatabase db = QSqlDatabase::database("some_name", false);
                  QString dbFilePath = "(...)";
                  db.setDatabaseName(dbFilePath);
                  db.open();
                  QSqlQuery *q = new QSqlQuery(db);
                  (...)
                  @

                  Hope that helps!

                  1 Reply Last reply
                  0
                  • elliott0124E Offline
                    elliott0124E Offline
                    elliott0124
                    wrote on last edited by
                    #21

                    Hi!

                    I'm follow this example.
                    But It doesn't work for me.

                    In Desktop, iOS simulator mode is fine.
                    But it doesn't work with my iPad.

                    Thanks you if you can help me.

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      jraichouni
                      wrote on last edited by
                      #22

                      I currently work on my work environment and do also have no iPad (iPhone only) but it shall work as described in above posts.

                      1 Reply Last reply
                      0
                      • elliott0124E Offline
                        elliott0124E Offline
                        elliott0124
                        wrote on last edited by
                        #23

                        Hi, Jamil

                        Thanks for your feedback.

                        Then I tried with my iPhone5s. And It just work, but my iPadRetina don't.
                        Post QT creator error log above:

                        This plugin does not support propagateSizeHints()
                        &
                        Failed to make complete framebuffer object 8cdd

                        Thanks again for your help.

                        1 Reply Last reply
                        0
                        • elliott0124E Offline
                          elliott0124E Offline
                          elliott0124
                          wrote on last edited by
                          #24

                          [Solved]
                          Update to QT5.2.1, iPad just work fine.

                          Thanks you.

                          1 Reply Last reply
                          0
                          • V Offline
                            V Offline
                            vtong
                            wrote on last edited by
                            #25

                            Hi,
                            Please help. I build my app for iPad, and using database Sqlite.
                            Can you explain the QString dbFilePath = "(...)"; why it is "(...)"
                            Thanks and regards

                            [quote author="Jamil Raichouni" date="1389206294"]Hi!

                            Take the example in the current thread.

                            The important things to consider are:

                            .pro file:
                            @
                            QT += sql
                            ios:QTPLUGIN += qsqlite

                            deploy the database file via something like:

                            databases.files = ../../src/data/xp-apt.sqlite
                            ios: databases.path = Documents
                            macx: databases.path = Contents/Resources
                            QMAKE_BUNDLE_DATA += databases

                            note, that the path databases.files is relative to the cwd, in which

                            the process qmake runs

                            @

                            The class implementing the initialisation/ access to the db needs to do the following for instance:
                            @
                            #include <QtSql>
                            (...)

                            QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "some_name");
                            QSqlDatabase db = QSqlDatabase::database("some_name", false);
                            QString dbFilePath = "(...)";
                            db.setDatabaseName(dbFilePath);
                            db.open();
                            QSqlQuery *q = new QSqlQuery(db);
                            (...)
                            @

                            Hope that helps![/quote]

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #26

                              It's a placeholder text that you must replace with the path to your database file

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • V Offline
                                V Offline
                                vtong
                                wrote on last edited by
                                #27

                                Thanks SGaist,
                                It works now.

                                1 Reply Last reply
                                0
                                • S Offline
                                  S Offline
                                  SherifOmran
                                  wrote on last edited by
                                  #28

                                  hi every body,

                                  i ve the same issue, should this mean that we don't need to use Q_IMPORT_PLUGIN(qsqlite);
                                  any more for static compiling?

                                  1 Reply Last reply
                                  0

                                  • Login

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