在Qt中,可以通过QSqlDatabase::database()
方法来获取之前创建的数据库连接。该方法接受一个字符串参数,用于指定连接名称。如果找不到对应的连接,则返回无效的数据库对象。
以下是一个简单示例代码:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 连接SQLite数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "myConnection");
db.setDatabaseName(":memory:"); // 内存模式下创建一个临时数据库
if (!db.open()) {
qDebug() << "无法连接数据库";
return 1;
}
QSqlQuery query(db);
// 创建表格
query.exec("CREATE TABLE person (id INT PRIMARY KEY, name VARCHAR(20), age INT)");
// 插入数据
query.prepare("INSERT INTO person VALUES (?, ?, ?)");
query.addBindValue(1);
query.addBindValue("Tom");
query.addBindValue(20);
if (!query.exec()) {
qDebug() << "插入记录失败:" << query.lastError().text();
return 1;
}
qDebug() << "插入记录成功!";
// 关闭数据库连接
db.close();
// 再次打开之前创建的连接并查询数据
QSqlDatabase db2 = QSqlDatabase::database("myConnection");
if (!db2.isValid()) {
qDebug() << "找不到对应的连接";
return 1;
}
if (!db2.open()) {
qDebug() << "无法打开数据库连接";
return 1;
}
QSqlQuery query2(db2);
if (query2.exec("SELECT * FROM person")) {
while (query2.next()) {
int id = query2.value(0).toInt();
QString name = query2.value(1).toString();
int age = query2.value(2).toInt();
qDebug() << "id:" << id << ", name:" << name << ", age:" << age;
}
} else {
qDebug() << "查询数据失败:" << query.lastError().text();
return 1;
}
return a.exec();
}
在上面的代码中,我们通过addDatabase()
方法创建了一个名为“myConnection”的Sqlite数据库连接,并执行了一些SQL语句来创建表格和插入记录。
然后,我们关闭了该连接。再次打开该连接时,可以通过database()
方法来获取之前创建的连接对象,并指定相应的名称。如果找不到对应的连接,则返回无效的数据库对象。
最后,我们查询之前插入的数据并输出结果。
注意:这里需要根据实际情况修改数据库文件名和连接名称。