在Qt中,为了动态生成sql语句并执行,惯用的做法是生成一个可编辑的QString字符串,然后利用arg()函数补全QString。如下:
QSqlQuery query(*mQSqlDatabase);
int v1=1;
int v2=2;
QString str=QString("insert into table(val1) values('%1')").arg(v1);
query.exec(str);
这里需要特别注意的是包围在%1外面的单引号。如果不加这个单引号,可能会出现一切意料之外的问题。
1.创建语句
QString tableName="test";
QString str=QString("create table %1(id integer Primary key,val1 varchar(32))").arg(tableName);
query.exec(str);
在创建语句中,不需要在%1,即表名上添加单引号。
2.插入语句
QSqlQuery query(*mQSqlDatabase);
int v1=1;
int v2=2;
QString str=QString("insert into table(val1) values('%1')").arg(v1);
query.exec(str);
此时在赋值的时候需要加单引号。
3.查询语句
QSqlQuery query(*mQSqlDatabase);
QString tableName="test";
int v1=1;
QString str=QString("select * from %1 where val1='%2'").arg(tableName).arg(v1);
query.exec(str);
在表格名处未加单引号,在表格的值的地方,加了。
4.结论
在涉及到表格内的值的sql操作时,尽量加上单引号,避免出问题。