Qt QSqlQuery CREATE DATABASE

404
26 ноября 2016, 18:59

Пишу приложение под восьмеркой. Использую MariaDB. Через HeidiSQL(клиент к MySQL) создал базу данных. В своем приложении успешно подключаюсь к ней, успешно создаю таблицы и работаю с ними. Хочу из своего приложения создавать базу данных. Пытаюсь сделать это следующим образом, но query запрос всегда возвращает false и выводит в дебаг "MySQL error: " "MySQL error code:-1"Как это нужно делать?

QSqlDatabase db_test = QSqlDatabase::addDatabase("QMYSQL");
db_test.setPort(3306);
db_test.setHostName("127.0.0.2");
db_test.setUserName("root");
db_test.setPassword("admin");
QSqlQuery query(db_test);
query.prepare( "CREATE DATABASE IF NOT EXISTS testDb");
if(query.exec()){
   qDebug()<<"It's OK";
}
else{
   qDebug()<<"MySQL error:" + query.lastError().text();
   qDebug()<<"MySQL error code:"+ QString::number(query.lastError().number());
}
Answer 1

В принципе, получается и без db.setDatabaseName("mysql")

Пробовал вот такой код:

Dialog::Dialog(QWidget *parent) : QDialog(parent) {
  DB = QSqlDatabase::addDatabase("QMYSQL");
  DB.setHostName("192.168.1.18");
  DB.setUserName("root");
  DB.setPassword("gfhjkm1");
  if(DB.open()) {
    QSqlQuery Query(DB);
    if (Query.exec("CREATE DATABASE IF NOT EXISTS blablabla"))
      qDebug() << "Ok"; else qDebug() << "Error query";
  } else qDebug() << "Error open";
}

Для теста запустил тут:

  • FreeBSD 11.0
  • MySQL 5.6.33
  • Qt 5.6.1
Answer 2

Не используйте prepare. Используйте exec, как тут

void MainWindow::creadb()
{
QString db_conti = "conti1";
QSqlDatabase db =      QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mysql");
db.setUserName("root");
db.setPassword(ui->password->text());
if (db.open())
{
    QSqlQuery query;
    query.exec("create database "+db_conti);
    qWarning()<<query.lastError();
... code for creating tables, views and users...
    db.close();
}
}
READ ALSO
Странная ошибка при компиляции Dev-c++

Странная ошибка при компиляции Dev-c++

Добрый день! Пишу простой класс на C++ при компиляции наткнулся на вот такую вот странную проблемуЯ мало что разбираю в C++, но вот мой

317
Можно-ли изменить данные в массиве VAO?

Можно-ли изменить данные в массиве VAO?

ЗдравствуйтеОбращаюсь к специалистам OpenGL

272
undefined reference to operator&lt;&lt; [дубликат]

undefined reference to operator<< [дубликат]

На данный вопрос уже ответили:

261
Несколько мод числового ряда c++

Несколько мод числового ряда c++

Делаю задания по книге Бьярне Страуструпа "Программирование: принципы и практика с использованием C++, 2-е издание"Во главе 4, задании 16 надо...

283