Как подключиться к базе данных mySQL моего веб-домена с помощью Qt?

У меня есть веб-домен, и в нем уже есть база данных mySql. Я хочу подключиться и получить данные из базы данных в свое приложение Qt. Вот моя попытка и мой результат. (Имя хоста, имя базы данных, имя пользователя и пароль были только что отредактированы).

  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setHostName("www.mydomain.com");
    db.setDatabaseName("myDatabase");
    db.setUserName("myName");
    db.setPassword("myPass");

    if(!db.open()){
        QSqlError err = db.lastError();
        qDebug() << err.text();
    }
    else {
        QSqlQuery qry;
        qDebug() << "Connected to SQL Database!";
        if (qry.exec("select * from dataTable;")){
            while(qry.next()){
                qDebug() << qry.value(1).toString();
            }
        }
        else {
            qDebug() << "ERROR QUERY";
        }


        qDebug() << "Closing...";
        db.close();
    }

    return a.exec();
}

Он показывает, что он подключился, но после выполнения запроса. Он возвращает ошибку. Кроме того, я попытался изменить на недопустимое имя хоста и/или имя пользователя, и он все равно подключился.

введите здесь описание изображения


person Xegara    schedule 08.01.2014    source источник
comment
Что будет напечатано, если вы измените строку qDebug на: qDebug() << "ERROR QUERY:" << qry.lastError().text();   -  person lpapp    schedule 09.01.2014


Ответы (1)


1) Попробуйте без точки с запятой.

«Для SQLite строка запроса может содержать только один оператор за раз». (http://qt-project.org/doc/qt-4.8/qsqlquery.html#exec)

Однако это одно утверждение, интерпретатор может запутаться из-за точки с запятой.


2) «Обратите внимание, что последняя ошибка для этого запроса сбрасывается при вызове exec()». (http://qt-project.org/doc/qt-4.8/qsqlquery.html#exec)

Поскольку это не подготовленный оператор, постарайтесь избегать exec(), чтобы была доступна информация о последней ошибке:

QSqlQuery qry("select * from dataTable");

if(qry.lastError()) {
  // ...
}

while(qry.next()) {
  qDebug() << qry.value(1).toString();
}
person marekful    schedule 08.01.2014
comment
Просто для полноты это не будет работать с привязками. Кроме того, я не уверен, что вы пытаетесь сделать с 2). Допустимо (и широко используется) иметь отдельный вызов exec(), а затем получить текст последней ошибки. - person lpapp; 09.01.2014