我使用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();
}
}
};
然后,我在另一个定义为Scheduler的类中使用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();
}
};
没有打印任何警告或错误。