Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt-如何使用带参数的SQL SELECT COUNT?_Qt_Sqlite_Qstring_Qsqlquery_Qsqldatabase - Fatal编程技术网

Qt-如何使用带参数的SQL SELECT COUNT?

Qt-如何使用带参数的SQL SELECT COUNT?,qt,sqlite,qstring,qsqlquery,qsqldatabase,Qt,Sqlite,Qstring,Qsqlquery,Qsqldatabase,我正在用QT编写一个程序,在编写SQL查询Select时遇到问题。 我有一个简单的表,其中包含以下列:ID、name\u或昵称、姓氏、职业。我想在查询中使用3个变量: QString name = "Peter"; QString surname = "Smith"; QString occupation = "New York"; 我想使用以下变量运行此查询: QSqlDatabase sql;

我正在用QT编写一个程序,在编写SQL查询Select时遇到问题。 我有一个简单的表,其中包含以下列:ID、name\u或昵称、姓氏、职业。我想在查询中使用3个变量:

QString name = "Peter";
QString surname = "Smith"; 
QString occupation = "New York";
我想使用以下变量运行此查询:

 QSqlDatabase sql;                                                 
 QSqlQuery query(sql);
 QString execute = "SELECT COUNT(name) FROM table1 WHERE name_or_nickname='?' AND surname='?' AND occupation='?';";
        query.prepare(execute);
        query.bindValue(0, name);
        query.bindValue(1, _surname);
        query.bindValue(2, _occupation);
        query.exec();

        if (query.next()) 
        {
            rows= query.value(0).toInt();
            return true;
        } 
        else 
        {
            qDebug() << query.lastError();
            return false;
        }
qsqlsql数据库;
QSqlQuery(sql);
QString execute=“从表1中选择计数(名称),其中名称或昵称='?'和姓氏='?'以及职业='?';”;
查询、准备(执行);
query.bindValue(0,名称);
query.bindValue(1,_姓氏);
查询.bindValue(2,_职业);
exec();
if(query.next())
{
rows=query.value(0.toInt();
返回true;
} 
其他的
{
qDebug()setupUi(此);
sql=QSqlDatabase::addDatabase(“QSQLITE”、“db”);
setDatabaseName(“E:\\folder\\database.sqlite3”);
sql.close();//这是由于第一个查询出现问题而调用的
sql.open();
QSqlQuery(sql);
QString execute=“创建表,如果不存在表1(id整数唯一主键、名称或昵称文本、姓氏文本、职业文本);”;
query.exec(execute);
qDebug()name_或_昵称=name_或_昵称;
这->姓=姓;
这->职业=职业;
}
人物::~Person()
{
删除用户界面;
}
bool Person::在表()中搜索
{
QSqlQuery(sql);
int行=0;
QString name=此->名称或昵称;
QString_姓氏=此->姓氏;
QString_职业=此->职业;
QString execute=“从表1中选择计数(名称),其中名称或昵称='?'和姓氏='?'以及职业='?';”;
查询、准备(执行);
query.bindValue(0,名称);
query.bindValue(1,_姓氏);
查询.bindValue(2,_职业);
exec();
if(query.next())
{
rows=query.value(0.toInt();
返回true;
} 
其他的
{

qDebug()您忘了在语句末尾加双引号

你的:

QString execute = "SELECT COUNT(name) FROM table1 WHERE surname='%1' AND occupation='%2';
应该是:

QString execute = "SELECT COUNT(name) FROM table1 WHERE surname='%1' AND occupation='%2';"

你忘了在语句末尾加双引号

你的:

QString execute = "SELECT COUNT(name) FROM table1 WHERE surname='%1' AND occupation='%2';
应该是:

QString execute = "SELECT COUNT(name) FROM table1 WHERE surname='%1' AND occupation='%2';"

尝试以下代码:

QSqlDatabase _sql;                                                 
QSqlQuery _query(_sql);
QString execute_stat = "SELECT COUNT(name) FROM table1 WHERE surname='%1' AND 
occupation='%2';";

_query.prepare(execute_stat.arg(surname, occupation));
q.exec();
int rows= 0;
if (q.next()) {
    rows= q.value(0).toInt();
}

尝试以下代码:

QSqlDatabase _sql;                                                 
QSqlQuery _query(_sql);
QString execute_stat = "SELECT COUNT(name) FROM table1 WHERE surname='%1' AND 
occupation='%2';";

_query.prepare(execute_stat.arg(surname, occupation));
q.exec();
int rows= 0;
if (q.next()) {
    rows= q.value(0).toInt();
}

更好地使用带参数的查询来防止SQL中的不同类型转换问题

QString execute = "SELECT COUNT(name) FROM table1 WHERE surname=? AND occupation=?;";
QSqlQuery query;
query.prepare(execute);
query.bindValue(0, surname);
query.bindValue(1, occupation);
query.exec();
if (query.next()) {
    rows= query.value(0).toInt();
} else {
    qDebug() << query.lastError(); //check your error here
}
QString execute=“从表1中选择COUNT(name),其中姓氏=?和职业=?;”;
QSqlQuery查询;
查询、准备(执行);
query.bindValue(0,姓氏);
查询.bindValue(1,职业);
exec();
if(query.next()){
rows=query.value(0.toInt();
}否则{

qDebug()最好使用带参数的查询,以防止SQL中出现不同类型的转换问题

QString execute = "SELECT COUNT(name) FROM table1 WHERE surname=? AND occupation=?;";
QSqlQuery query;
query.prepare(execute);
query.bindValue(0, surname);
query.bindValue(1, occupation);
query.exec();
if (query.next()) {
    rows= query.value(0).toInt();
} else {
    qDebug() << query.lastError(); //check your error here
}
QString execute=“从表1中选择COUNT(name),其中姓氏=?和职业=?;”;
QSqlQuery查询;
查询、准备(执行);
query.bindValue(0,姓氏);
查询.bindValue(1,职业);
exec();
if(query.next()){
rows=query.value(0.toInt();
}否则{

qDebug()老实说,我不知道为什么上面提到的两种方法都没有效果

然而,最简单的版本对我有效:

QString execute=“从表1中选择计数(*),其中(姓名或昵称=“+name+”)和(姓氏=“+姓氏+”)以及(职业=“+职业+”);”


谢谢你的帮助。

老实说,我不知道为什么上面建议的两种方法都不管用

然而,最简单的版本对我有效:

QString execute=“从表1中选择计数(*),其中(姓名或昵称=“+name+”)和(姓氏=“+姓氏+”)以及(职业=“+职业+”);”



谢谢你的帮助。

是的,当然,但我只是在StackOverflow上犯了这个错误。在我的程序中我有。你有什么建议?我添加了那些括号,但它不起作用。你有什么建议?好的,我已经解决了问题。非常感谢你的帮助:-)是的,当然,但我只在StackOverflow上犯了这个错误。在我的程序中ram我有。你有什么建议?我添加了那些括号,但它不起作用。你有什么建议?好的,我已经解决了这个问题。非常感谢你的帮助:-)在QString execute行的末尾添加了缺少的括号,实际上仍然不起作用…我看到你使用了
QSqlDatabase\u sql;
,但是你在哪一部分设置了confI配置并打开连接?`好吧,我有两个类-MainWindow和Person。我在MainWindow类中创建Person对象时在MainWindow的构造函数中设置了配置并传递了_sql参数。因此我认为一切都应该运行良好,因为您在问题中没有指出这是可能导致错误的一点。B但是什么会导致这个问题呢?我甚至已经尝试过通过引用传递这个参数,但它没有改变任何东西。还有其他建议吗?在QString execute行的末尾添加了缺少的括号,实际上仍然不起作用……我看到您使用的是
QSqlDatabase\u sql;
,但是您在哪一部分设置了配置and打开连接?`好吧,我有两个类——MainWindow和Person。我在MainWindow的构造函数中设置了配置,并在MainWindow类中创建Person对象时传递了_sql参数。所以我认为一切都应该运行良好,因为您在问题中没有指出这是一个可能导致错误的点。但是什么可以呢导致此问题的原因?我甚至已经尝试通过引用传递此参数,但它没有改变任何内容。还有其他建议吗?没有帮助。isActive()仍然返回false:-(您还有什么建议?您不会使用isActive()要知道名称的计数,计数将存储在行变量中我知道,我首先使用它来查看查询是否正确它没有帮助。isActive()仍然返回false:-(您还有什么建议?您不会使用isActive()来知道
QString execute = "SELECT COUNT(name) FROM table1 WHERE surname=? AND occupation=?;";
QSqlQuery query;
query.prepare(execute);
query.bindValue(0, surname);
query.bindValue(1, occupation);
query.exec();
if (query.next()) {
    rows= query.value(0).toInt();
} else {
    qDebug() << query.lastError(); //check your error here
}