Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

подключаюсь к SQLite базе данных, но не могу выполнить никаких запросов



  • Здравствуйте. Взял простейший тестовый код из интернета соединения с базой данных SQLite и запросов к ней:

    #include <QtSql/QSql>
    #include <QtSql/QSqlDatabase>
    #include <QtSql/QSqlQuery>
    #include <QtSql/QSqlRecord>
    #include <QSqlDatabase>
    #include <QSqlError>
    #include <QDebug>
    #include <QCoreApplication>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication app(argc, argv);
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
            db.setDatabaseName("mydb.sqlite");
            if (!db.open()) {
                qDebug() << "Database not opened!";
                return -1;
            }
        QSqlQuery query(db);
        QString str = "CREATE TABLE IF NOT EXISTS mytable ("
                    "number INTEGER PRIMARY KEY NOT NULL, "
                    "address TEXT, "
                    "age INTEGER"
                    ");";
        bool b = query.exec(str);
        if (!b) {
                qDebug() << "Something went wrong! b="<<b
                         << query.lastError().isValid()
                         << query.lastError().text()
                         << query.lastError().number();
        }
        else qDebug() << "Table is created b="<<b;
        QString str_insert = "INSERT INTO my_table(number, address, age) "
                    "VALUES (%1, '%2', %3);";
        str = str_insert.arg("14").arg("hello world str.").arg("37");
        b = query.exec(str);
        if (!b) {
            qDebug() << "INSERT does not work!"
                     << query.lastError().text()
                     << query.lastError().number()
                     << "b="<<b;
        }
        if (!query.exec("SELECT * FROM my_table;")) {
            qDebug() << "Even SELECT does not work!"
                     << query.lastError().text()
                     << query.lastError().number()
                     << "b="<<b;
            return -2;
        }
        QSqlRecord rec = query.record();
        int number = 0, age = 0;
        QString address = "";
        while (query.next()) {
            number = query.value(rec.indexOf("number")).toInt();
            age = query.value(rec.indexOf("age")).toInt();
            address = query.value(rec.indexOf("address")).toString();
            qDebug() << "number is " << number
                     << ". age is " << age
                     << ". address" << address
                     << query.lastError().text()
                     << query.lastError().number();
            }
        return app.exec();
    }
    

    Первоначально у меня нет базы данных (я её предварительно в браузере SQlite не создавал). Я так понимаю, Qt сам должен создать пустую базу данных с указанным именем.
    Но почему-то он мне выдаёт:
    Database is opened
    INSERT does not work!
    Even SELECT does not work!
    Т. е. базу данных открыть может, но почему-то даже SELECT не работает.
    Мой .pro файл:
    QT += core gui sql
    CONFIG += c++11 console
    CONFIG -= app_bundle
    Работаю на ОС Ubuntu. Пробовал каждый раз удалять создаваемую базу данных mydb.sqlite, менял права доступа, ничего не помогает. Использую Qt 4.11.0 (основан на 5.14.0), компилятор gcc 7.5.0.
    Потратил уйму времени, но как не понимал, в чём проблема, так и сейчас не понимаю.


  • Qt Champions 2019



  • Updated the code. It is shown where lastError() is used. It outputs:
    Database is opened
    INSERT does not work! "no such table: my_table Unable to execute statement" 1
    Even SELECT does not work! "no such table: my_table Unable to execute statement" 1


  • Qt Champions 2019

    @And92 said in подключаюсь к SQLite базе данных, но не могу выполнить никаких запросов:

    my_tabl

    As you can see the table was not created, so put lastError() after "CREATE TABLE" and see why it fails.



  • @jsulm, updated the code again. According to the output:

    Table is created b= true
    INSERT does not work! "no such table: my_table Unable to execute statement" 1 b= false
    Even SELECT does not work! "no such table: my_table Unable to execute statement" 1 b= false

    the table was created. I also checked the database through the SQlitebrowser:
    yes, the table was created with the necessary fields.
    But INSERT and SELECT somewhy don't work.
    Don't know why.


  • Qt Champions 2019

    @And92 The name of the table is mytable not my_table:

    CREATE TABLE IF NOT EXISTS mytable
    ...
    INSERT INTO my_table
    


  • Thanks, Sir. A foolish error. Will be more careful.


Log in to reply