C++ “的浓度”;“一套字符串”;及;来自QLineEdit的输入;成串

C++ “的浓度”;“一套字符串”;及;来自QLineEdit的输入;成串,c++,qt,qt4,concatenation,qstring,C++,Qt,Qt4,Concatenation,Qstring,我正在编写一个GUI应用程序,它将从oracle数据库执行select*fromtable_name,并将结果填充到TableView模型中。将我的查询作为查询我使用的数据库的输入--- 而且它工作得很好 现在,我想通过让用户只键入表名作为lineEdit中的输入来优化它。程序将自行对其执行从表_name中选择* 因此,我认为我需要将“SELECT*FROM”存储在QString变量中,并将lineEdit的输入与之关联 我不太确定这个concation的语法,所以我的两次尝试--- 以及 已导

我正在编写一个GUI应用程序,它将从oracle数据库执行select*fromtable_name,并将结果填充到TableView模型中。将我的查询作为查询我使用的数据库的输入---

而且它工作得很好

现在,我想通过让用户只键入表名作为lineEdit中的输入来优化它。程序将自行对其执行从表_name中选择*

因此,我认为我需要将“SELECT*FROM”存储在QString变量中,并将lineEdit的输入与之关联

我不太确定这个concation的语法,所以我的两次尝试---

以及

已导致生成错误。关于如何执行所需运算的任何建议?

您可以使用它向字符串添加参数

例如:

QString input = ui->lineEdit->text();
QString myQUery = QString("SELECT * FROM %1").arg(input);

您可以使用
QSqlTableModel
QTableView
中显示表格内容:

QSqlTableModel * model = new QSqlTableModel(this,db);
model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setTable( "someTable" );
model->select();

ui->tableView->setModel( model );
但是,如果您想使用
QSqlQuery
,可以进行如下查询:

String myquery = QString("SELECT * FROM %1").arg(ui->lineEdit->text());
或者更好:

query.prepare("SELECT * FROM :tableName");
query.bindValue(":tableName", ui->lineEdit->text());

请不要像那样使用字符串conception来构造SQL语句,以避免。真的!!!这真的很有用。从现在起,我将期待在基于sql的应用程序中避免字符串连接。你的第一个使用.arg(ui->lineEdit->text())的解决方案对我有用。。。但是我想请您(简要地)解释一下query.prepare和query.bindValue的用法,以便我以后学习和实现。@AmarjitBiswas使用
bindValue
更安全,因为它可以保护您免受SQL注入。这是因为绑定时从不直接在SQL语句中传递值,并且在查询编译之后和执行之前插入值。
QSqlTableModel * model = new QSqlTableModel(this,db);
model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setTable( "someTable" );
model->select();

ui->tableView->setModel( model );
String myquery = QString("SELECT * FROM %1").arg(ui->lineEdit->text());
query.prepare("SELECT * FROM :tableName");
query.bindValue(":tableName", ui->lineEdit->text());