Qt 操作读取sqlite数据库信息,表名,表数据,字段类型

定义一个容器存放数据库中表信息数据:

static std::map>>> read(const QString& name);
         // 	 表名	  //表数据vector	 //每一条数据每一列的信息vector   类型   列名      值

定义接口函数如下,传入数据库名称即可:

/************************************
 *@func:   SqliteReader::read
 *@brief:  返回值中已拿到表名 列名 单元格数据信息
 *@params: const QString & name 数据库名
 *@return: std::map>>>
************************************/
std::map>>> 
SqliteReader::read(const QString& name)
{
	std::map>>> values{};

	// 打开数据库
	s_db = QSqlDatabase::addDatabase("QSQLITE");
	s_db.setDatabaseName(name);
	if (!s_db.open())
	{
		qDebug() << s_db.lastError().text();
		return values;
	}

	// 读数据
	for (const auto& tableName : s_db.tables())
	{
		QString selectSql = QString("select * from %1;").arg(tableName);
		QSqlQuery query{};
		if (!query.exec(selectSql))
		{
			qDebug() << query.lastError().text();
			continue;
		}

		std::vector>> tableDatas;
		while (query.next())
		{
			std::vector> singleResultInfos{}; // 单条数据信息
			for (int i = 0; i < query.record().count(); ++i)
			{
				auto type = query.record().field(i).type();
				auto name = query.record().fieldName(i);
				auto value = query.record().value(i).toString();
				singleResultInfos.emplace_back(std::make_tuple(type, name, value));
			}

			tableDatas.emplace_back(std::move(singleResultInfos));
		}
		values[tableName] = std::move(tableDatas);
	}

	return std::move(values);
}

注意:空表没有数据将不会添加到返回的结构中


完整程序路径:
https://github.com/lesliefish/Qt/tree/master/QtSQL/SqliteReader
环境:vs2015+Qt5.9.6

你可能感兴趣的:(Qt)