я использую QSqlDatabase
вставить данные в MySQL.
Сначала я определяю класс с именем Inserter
:
class Inserter
{
QSqlDatabase db_connection;
public:
Insert()
{
db_connection = QSqlDatabase::addDatabase("QMYSQL");
db_connection.setDatabaseName("dbname");
db_connection.setHostName("localhost");
db_connection.setUserName("root");
db_connection.setPassword("psd");
if(!db_connection.open())
{
qDebug() << db_connection.lastError();
}
}
};
А потом я использую Insert
в другом классе, определенном как Планировщик:
class Scheduler
{
Inserter inserter;
public:
Scheduler()
{
inserter = Inserter();
}
};
Когда я запускаю эту программу, Qt выводит предупреждение:
QSqlDatabasePrivate :: removeDatabase: соединение ‘qt_sql_default_connection’ все еще используется, все запросы перестанут работать.
QSqlDatabasePrivate :: addDatabase: повторяющееся имя соединения ‘qt_sql_default_connection’, старое соединение удалено.
QSqlDatabase :: addDatabase () должен вызываться один раз для типа и имени соединения. Многократный вызов addDatabase («QMYSQL») приводит к
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
Кроме того, наличие существующих объектов QSqlQuery при удалении базы данных приводит к
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
Если приведенная выше причина предупреждения верна, то почему последовательность предупреждений не должна быть:
QSqlDatabasePrivate :: addDatabase: повторяющееся имя соединения ‘qt_sql_default_connection’, старое соединение удалено.
QSqlDatabasePrivate :: removeDatabase: соединение ‘qt_sql_default_connection’ все еще используется, все запросы перестанут работать.
Наконец, я перемещаю исходный код в класс Scheduler
следующим образом:
class Scheduler
{
QSqlDatabase db_connection;
void initDBConnection()
{
db_connection = QSqlDatabase::addDatabase("QMYSQL");
db_connection.setDatabaseName("walmart");
db_connection.setHostName("localhost");
db_connection.setUserName("root");
db_connection.setPassword("");
if(!db_connection.open())
{
qDebug() << db_connection.lastError();
}
}
public:
Scheduler()
{
initDBConnection();
}
};
Нет предупреждений или ошибок напечатано.
Задача ещё не решена.
Других решений пока нет …