我用来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: connection '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: connection '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();
}
};
没有打印警告或错误。