使用的是QSqlQueryModel这个类,结合QTableView来显示。在链接数据库后,根据表名,自动去查询和显示表数据。
一、链接数据库
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(host);
db.setUserName(username);
db.setPassword(pwd);
db.setDatabaseName(db_name);
db.setConnectOptions("MYSQL_OPT_RECONNECT=1");
二、查询数据库表,获取表数据
void MysqlSettingDialog::on_pushButton_find_clicked()//查询
{
DataOperator *sql = DataOperator::getInstance(); //链接的数据库
if (sql->isOpen())
{
QSqlQueryModel *m_model = new QSqlQueryModel(ui->tableView);
int index = ui->comboBox->currentIndex();
QString table_name = "";
switch (index) //根据不同的选择,查询不同的表
{
case 0:table_name = "users"; break;
case 1:table_name = "tools"; break;
case 2:table_name = "tooldefaultparam"; break;
case 3:table_name = "temperature"; break;
case 4:table_name = "coefficient"; break;
case 5:table_name = "latestcoefficient"; break;
case 6:table_name = "products"; break;
default:break;
};
m_model->clear();
QVariantList list;//获取表的列名
QString cmd = QString("SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE table_name = '%1'; ").arg(table_name);
if (sql->execute(cmd))
{
foreach(QSqlRecord record, sql->getLastQueryResult())
{
list << record.value(record.indexOf("COLUMN_NAME"));
}
}
//查询表数据
m_model->setQuery(QString("SELECT * FROM %1").arg(table_name));
//把数据和列名对应上
for (int i = 0; i < list.size(); i++)
{
m_model->setHeaderData(i, Qt::Horizontal, list.at(i));
}
ui->tableView->setModel(m_model);//数据放置进去
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//根据内容自动调整宽度
}
else
{
QMessageBox::warning(this, QStringLiteral("错误"), QStringLiteral("未连接,请检查."));
}
}
效果图如下: