私は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
Scheduler として定義された別のクラスで使用します。
class Scheduler
{
Inserter inserter;
public:
Scheduler()
{
inserter = Inserter();
}
};
このプログラムを実行すると、Qt が警告を出力します。
QSqlDatabasePrivate::removeDatabase: 接続 'qt_sql_default_connection' はまだ使用中です。すべてのクエリが機能しなくなります。
QSqlDatabasePrivate::addDatabase: 重複する接続名 'qt_sql_default_connection'、古い接続が削除されました。
QSqlDatabase::addDatabase() は、タイプと接続名ごとに 1 回呼び出されることになっています。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();
}
};
警告やエラーは出力されません。