Jjreina
Jjreina

Reputation: 2713

QSqlQuery::prepare: database not open

I'm trying to do SELECT with DB MySql. This is code:

qDebug() << "status" << db.db().isOpen();
query.prepare("SELECT jobId FROM jobs");

and result is:

status true 
QSqlQuery::prepare: database not open

How can I fix it?

Upvotes: 2

Views: 10476

Answers (3)

user1158973
user1158973

Reputation: 11

QSqlQuery (
    const QString & query = QString(),
    QSqlDatabase db = QSqlDatabase()
)
QSqlDatabase QSqlDatabase::database (
    const QString & connectionName = QLatin1String(defaultConnection),
    bool open = true
) [static]

QSqlQuery query(
    QString("SELECT jobId FROM jobs"),
    QSqlDatabase::database("you name connection")
);
query.exec();

Upvotes: 0

Neox
Neox

Reputation: 2004

Here is a snippet I have written recently

//Add the database connection
QSqlDatabase m_db = QSqlDatabase::addDatabase("MYSQL", "m_db_connect");
//Set relevant settings
m_db.setHostName("127.0.0.1");
m_db.setDatabaseName("maindb");
m_db.setUserName("neox");
m_db.setPassword("12345567");
//Open the database
if(!m_db.open()) {
    qWarning() << __FUNCTION__ << "Failed to open main database; aborting...";
    qWarning() << __FUNCTION__ << m_db.lastError().text();
    return false;
}
//Create query string
QString queryString("SELECT id from events");
QSqlQuery query(m_db, queryString);   
//Check if the query has executed properly
if(!query.exec()) {
    qWarning() << __FUNCTION__ <<":"<<__LINE__<<"Failed to fetch ids";
    qWarning() << __FUNCTION__ <<":"<<__LINE__<<m_db.lastError().text();
    return false;
}
QList<int> id_list;
//Here I check whether the select has returned any results and append them to the list
while(query.next()) {
    int id = query.value(0).toInt();
    id_list.append(id);
}

This has worked for me up to now, and I hope this is helpful

Upvotes: 0

pnezis
pnezis

Reputation: 12321

Try passing the database in the constructor of the QSqlQuery:

QSqlQuery query(db.db());
query.prepare("SELECT jobId FROM jobs");

Upvotes: 9

Related Questions