有一个听力表 - 食物:
void MainWindow:: createConnection()
{
dbase = QSqlDatabase::addDatabase("QSQLITE", "foods");
dbase.setDatabaseName(databaseName + ".db");
dbase.open();
if (!dbase.open()) {
msgBox.setText("Cant connect to database.Cant open datbase file.");
msgBox.exec();
}
else
{
QSqlQuery d(dbase);
d.prepare("SELECT COUNT(*) FROM foods");
d.exec();
int rows ;
if (d.next()) {
rows= d.value(0).toInt();
}
d.prepare("SELECT * FROM foods");
d.exec();
int columns= d.record().count();
ui->tableWidget->setColumnCount(columns);
ui->tableWidget-> setRowCount(rows);
for (int var = 0; var < columns; ++var)
{
ui->tableWidget->setHorizontalHeaderItem(var, new QTableWidgetItem(d.record().fieldName(var)));
}
if( d.prepare("SELECT name FROM foods"));
{
d.exec();
QList<QVariant> V;
if (d.next()) {
V= d.value(0).toList();
}
for (int var = 0; var < rows; ++var)
{
ui->tableWidget->item(var,0)->setText(V.at(var).toString());
}
}
}
}
而且,这里的部分:
d.prepare("SELECT COUNT(*) FROM foods");
d.exec();
int rows ;
if (d.next()) {
rows= d.value(0).toInt();
}
返回表的实际行数,但列表 V - 由 0 个元素保持为空:
if( d.prepare("SELECT name FROM foods"));
{
d.exec();
QList<QVariant> V;
if (d.next()) {
V= d.value(0).toList();
}
我已经尝试创建一个新请求QSqlQuery
- d1 并在其上执行请求,但结果是一样的。
通过这样的查询,我们选择第三列的所有元素,然后在一个循环中,我们从选择中迭代元素本身:
在下一次调用之后
prepare/exec
会有其他数据。