I am writing an application under the figure eight. I use MariaDB. Through HeidiSQL (client to MySQL) created a database. In my application, I successfully connect to it, successfully create tables and work with them. I want to create a database from my application. I try to do it as follows, but the query query always returns false and outputs to debug

"MySQL error:"
"MySQL error code: -1"

How to do it?

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()); } 

    2 answers 2

    In principle, it turns out without db.setDatabaseName ("mysql")

    I tried this code:

     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"; } 

    For the test launched here:

    • FreeBSD 11.0
    • MySQL 5.6.33
    • Qt 5.6.1

      Do not use prepare. Use exec, as here

       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(); } }