精华内容
下载资源
问答
  • QSqlQuery query(d->_db); QString bookName; QString strSql(“SELECT * FROM books WHERE name=%1”).arg(bookName); QSqlQuery query(strSql); if(!query.exec()) { QDebug() << FILE << LINE <...

    问题描述:
    数据库:SQLite
    问题代码:
    QSqlQuery query(d->_db);
    QString bookName;
    QString strSql(“SELECT * FROM books WHERE name=%1”).arg(bookName);

    QSqlQuery query(strSql);

    if(!query.exec())

    {
    QDebug() << FILE << LINE << query.lastError.text();
    }

    while (query.next()) {
    QString bookName = query.value(0).toString();

    doSomething(id);
    }

    query.exec()执行失败,lastError提示 :无查询无法获取行。

    解决方案:
    在exec()之前先进行绑定:
    query.bindValue(":name", bookName);

    官网示例:
    QSqlQuery testQuery(QString(“INSERT INTO test(testcol) VALUES(?)”));
    testQuery.bindValue(0, someQStringObg);
    testQuery.exec();

    推荐使用bindValue方式,理由如下:

    1.有效防止Sql注入,保证Sql语句的原始意义不发生变化.

    2.在字符串中含有特殊字符(如:单引号,中括号等)时,能对其处理.

    3.在执行多条相同数据类型操作(Sql原语相同,数据不同)时,减少Sql的预编译次数,优化Sql执行效率.

    4.可读性强.

    展开全文
  • 如何判断SQL语句查询结果为空

    万次阅读 2018-06-20 08:46:39
    执行与不的操作,那判断结果是否为空是关键。$sql="select * from `operate` where `no_end` = ''";$result=mysql_query($sql);if(!empty($result)){---不为空的执行的代码----}else{---为空的执行的...

    执行空与不空的操作,那判断结果是否为空是关键。

    $sql="select * from `operate` where `no_end` = ''";
    $result=mysql_query($sql);

    if(!empty($result)){

    ---不为空的执行的代码----

    }else{

    ---为空的执行的代码----

    }

    展开全文
  • 在进行sql查询的时候出现问题: QSqlQuery::value: not positioned on a valid record 步骤1:定义个Qstring sqlstr 步骤2:sqlquery.prepare(sqlstr) 步骤3:使用sqlquery.bind(value) 步骤4:执行sqlquery.exec()...

    在进行sql查询的时候出现问题:
    QSqlQuery::value: not positioned on a valid record

    1. 步骤1:定义个Qstring sqlstr
    2. 步骤2:sqlquery.prepare(sqlstr)
    3. 步骤3:使用sqlquery.bind(value)
    4. 步骤4:执行sqlquery.exec()

    结果会有
    QSqlQuery::value: not positioned on a valid record
    这种是因为之前有进行过查询导致无法获取。
    这里需要进行一波骚气的操作 加一个判断就好了
    后面需要加一个判断

    if(sqlquery.first()){
    ...
    }
    

    这种坑碰到了记录一下

    展开全文
  • Qt 之 QSqlQuery Class

    千次阅读 2017-08-20 14:04:23
    QSqlQuery 封装了从在一个 QSqlDatabase(数据库连接)上的SQL 查询(queries) 创建,导航,检索(取回) 数据的功能。它可以用来执行DML(data manipulation language)即数据操作语句,比如 select,insert,...

    详细描述

    QSqlQuery 类提供了一种执行和操作SQL语句的方法。

    QSqlQuery 封装了从在一个 QSqlDatabase(数据库连接)上的SQL 查询(queries) 创建,导航,检索(取回) 数据的功能。它可以用来执行DML(data manipulation language)即数据操作语句,比如 select,insert,update,delete 即数据库最常用的增删改查操作语句,也可以用来执行DDL(data definition language)即数据定义语句,例如 create table。它同样可以用来执行不属于国际标准SQL的特定数据库的命令(例如,PostgreSQL的 SET DATESTYLE=ISO)。


    成功执行SQL语句会设置query的状态为活跃(active),isActive()  返回true。否则query的状态被设置为不活跃(inactive)。不论哪种情况,当执行一条新的SQL语句时,查询(query) 定位在一条无效的记录上。一个活跃的query查询在值可以被检索到之前必须被导航到一条有效的记录(因此isValid()返回true)。


    对于一些数据库,当你调用 commit() 或者 rollback() 时如果一个活跃的查询(query)存在select语句,那么commit(事务)或者rollback(回滚)将会失败。


    可以通过以下函数去访问查询到的数据库记录:next()previous()first()last()seek()。这些函数允许程序员向前,向后或者任意地访问query返回的记录。如果你只需要向前访问结果集(比如使用next()),你可以使用 setForwardOnly() ,这将节省大量的内存开销并提高某些数据库的性能。一旦一个活跃的查询被定位在一条有效的记录上,可以通过value()函数检索数据。所有数据都是使用QVariants数据类型从SQL 后台传输的。

    举个例子:

       //查询之前记得先打开数据库连接。。。
       QSqlQuery query("SELECT country FROM artist");
        while (query.next()) {
            QString country = query.value(0).toString();
            doSomething(country);
        }

    使用value(int)可以访问到query对象返回的数据。 由SELECT语句返回的数据中的每个字段都是通过在语句中传递字段的位置来访问的,从0开始。这使得使用SELECT *查询是不明智的,因为返回的字段的顺序是不确定的。

    出于效率考虑,没有通过字段名访问字段内容的函数,除非你使用带名字的prepared queries(可是明明有QVariant QSqlQuery::value(const QString & name) const,。可能这个重载函数是在后面加入的,而当前的文档是还没加入这个重载函数的时候写的),使用record().indexOf()可以将一个字段名转换成对应的索引,例如:

        QSqlQuery query("SELECT * FROM artist");
        int fieldNo = query.record().indexOf("country");
        while (query.next()) {
            QString country = query.value(fieldNo).toString();
            doSomething(country);
        }

    QSqlQuery支持准备查询执行(prepared query execution)和将参数值绑定到占位符。一些数据库不支持这些特性,对于那些不支持的,Qt模拟了所需的功能。例如,Oracle和ODBC支持准备查询(prepared query),Qt使用支持的这种特性;但对于不支持这种特性的数据库,Qt自己实现了这些特性,比如说,当执行一条查询通过实际值去代替占位符。使用numRowsAffected() 找出多少条非查询(non-SELECT)查询生效,使用size()去找出由SELECT查找出的数量。


    Oracle数据库通过 ‘冒号字段名’  来识别占位符,例如 :‘:name’.ODBC简单地使用了 ? 字符。这两种语法Qt都支持,限制条件是你不能在同一个查询中混合使用这两种语法。

    你可以使用QMap<QString, QVariant> QSqlQuery::boundValues() const检索在单个变量(映射 )中所有字段的值。例如:

        QMapIterator<QString, QVariant> i(query.boundValues());
        while (i.hasNext()) {
            i.next();
            cout << i.key().toUtf8().data() << ": "
                 << i.value().toString().toUtf8().data() << endl;
        }
    等价于:

        QList<QVariant> list = query.boundValues().values();
        for (int i = 0; i < list.size(); ++i)
            cout << i << ": " << list.at(i).toString().toUtf8().data() << endl;

    绑定值的几种方法

    下面,我们将使用四种不同的绑定方法,每一种方法给出相同的示例,以及将值绑定到存储过程的一个示例。

    1、使用命名占位符命名的绑定:

        QSqlQuery query;
        query.prepare("INSERT INTO person (id, forename, surname) "
                      "VALUES (:id, :forename, :surname)");
        query.bindValue(":id", 1001);
        query.bindValue(":forename", "Bart");
        query.bindValue(":surname", "Simpson");
        query.exec();

    2、使用指定占位符的位置绑定:

        QSqlQuery query;
        query.prepare("INSERT INTO person (id, forename, surname) "
                      "VALUES (:id, :forename, :surname)");
        query.bindValue(0, 1001);
        query.bindValue(1, "Bart");
        query.bindValue(2, "Simpson");
        query.exec();
    3、使用位置占位符绑定值(版本1):
    
        QSqlQuery query;
        query.prepare("INSERT INTO person (id, forename, surname) "
                      "VALUES (?, ?, ?)");
        query.bindValue(0, 1001);
        query.bindValue(1, "Bart");
        query.bindValue(2, "Simpson");
        query.exec();

    4、使用位置占位符的绑定值(版本2):
     
    
        QSqlQuery query;
        query.prepare("INSERT INTO person (id, forename, surname) "
                      "VALUES (?, ?, ?)");
        query.addBindValue(1001);
        query.addBindValue("Bart");
        query.addBindValue("Simpson");
        query.exec();

    将值绑定到存储过程(procedure):

    这段代码调用了一个名叫AsciiToInt()的存储过程,通过参数传递一个字符,并将其结果输出到out参数中。

        QSqlQuery query;
        query.prepare("CALL AsciiToInt(?, ?)");
        query.bindValue(0, "A");
        query.bindValue(1, 0, QSql::Out);
        query.exec();
        int i = query.boundValue(1).toInt(); // i is 65

    注意,未绑定的参数将保留它们的值。

    使用return语句返回值或返回多个结果集的存储过程没有得到完全的支持。具体细节请参见 SQL Database Drivers(可到Qt Assistant中检索关键字)。
    警告:你必须在一个QSqlQuery创建之前加载SQL驱动和打开数据库连接(QSqlDatabase).并且,在QSqlQuery对象存在是数据库连接一定要保持打开;否则,QSqlQuery的行为是未定义的。

    API介绍

    bool QSqlQuery::execBatch(BatchExecutionMode mode = ValuesAsRows)
    在批处理中执行提前准备好的SQL查询,所有的绑定参数都必须是QVariant的链表。如果数据库不支持批处理,则驱动程序将使用常规exec()调用来模拟它。查询成功执行返回true;否则返回false。
    例子:
    QSqlQuery q;
    q.prepare("insert into myTable values (?, ?)");
    
    QVariantList ints;
    ints << 1 << 2 << 3 << 4;
    q.addBindValue(ints);
    
    QVariantList names;
    names << "Harald" << "Boris" << "Trond" << QVariant(QVariant::String);
    q.addBindValue(names);
    
    if (!q.execBatch())
        qDebug() << q.lastError();

    上面的例子在myTable表中插入了4个新行:
    1  Harald
    2  Boris
    3  Trond
    4  NULL

    要绑定NULL值,必须将相关类型的空QVariant添加到绑定的QVariantList中;比如,如果你使用strings(字符串)QVariant(QVariant::String)应该被添加到QVariantList中。
    注意:每个绑定的QVariantList必须包含相同数量的变体。
    注意:列表中的QVariant的类型不能改变。例如,您不能在QVariantList中混合整数和字符串变体。


    展开全文
  • Qt中的Qsqlquery

    2019-04-19 15:39:37
    QSqlQuery封装了在QSqlDatabase上执行的SQL查询中创建,导航和检索数据所涉及的功能。 它可以用来执行DML(数据操作语言)语句,如SELECT,INSERT,UPDATE和DELETE,以及DDL(数据定义语言)语句,如CREATE TABLE。 ...
  • 查询结果集是否为空如何判断

    千次阅读 2015-10-18 13:58:50
    在连接数据库进行查询时,如果输入的查询对象在数据库中不存在时候,应该用以下的方法来作为判断 if(rs.isAfterLast()==rs.isBeforeFirst()){ System.out.print("您所查找的信息不存在,请确认后再查找!");} ...
  • } 编译运行后,可以看到已经创建了该文件: 创建成功后,该文件默认为空的,然后就可以使用QSqlQuery类来操作该数据库, QSqlQuery类使用的是SQL语句,如果只需要使用高层次的数据 库接口(不关心 SQL 语法),我们可以...
  • qt 利用QSqlQuery类执行SQL语句

    热门讨论 2011-11-11 13:37:01
    qt 利用QSqlQuery类执行SQL语句
  • } 编译运行后,可以看到已经创建了该文件: 创建成功后,该文件默认为空的,然后就可以使用QSqlQuery类来操作该数据库, QSqlQuery类使用的是SQL语句,如果只需要使用高层次的数据 库接口(不关心 SQL 语法),我们可以...
  • 前面两节中已经在Qt里利用QSqlQuery类执行了SQL语句,这一节我们将详细讲解该类的使用。需要说明,因为我们重在讲解Qt中的数据库使用,而非专业的讲解数据库知识,所以不会对数据库中的一些知识进行深入讲解。...
  • 前面两节中已经在Qt里利用QSqlQuery类执行了SQL语句,这一节我们将详细讲解该类的使用。需要说明,因为我们重在讲解Qt中数据库使用,而非专业的讲解数据库知识,所以不会对数据库中的一些知识进行深...
  • 在使用QT的QSqlQueryModel操作SQLite数据库的时候,遇到了查询只能返回256个结果的问题,经过差不多大半天的时候才找到解决方法。既然说到数据库操作了,就把一些基础性的东西也都贴出来,一方面供初学者参考,另一...
  • 数据库(三)利用QSqlQuery类执行SQL语句 楼主  发表于 2013-5-15 22:39:29 | 查看: 813| 回复: 0 利用QSqlQuery类执行SQL语句 版权声明 该文章原创于作者...
  • SQL即结构化查询语言,是关系数据库的标准语言。前面两节中已经在Qt里利用QSqlQuery类执行了SQL语句,这一节我们将详细讲解该类的使用。需要说明,因为我们重在讲解Qt中的数据库使用,而非专业的讲解数据库知识,...
  • 导语SQL即结构化查询语言,是关系数据库的标准语言。前面两节中已经在Qt里利用QSqlQuery类执行了SQL语句,这一节我们将详细讲解该类的使用。需要说明,因为我们重在讲解Qt中的数据库使用,而非专业的讲解数据库知识...
  • “select max(id) from tablename",在使用sqlite3_get_table调用成功后,返回的columnum和rownum都1,即使数据表里无记录也是如此,我们在sqlite3 shell中可以看到该条查询语句在表为空的时候确实返回了1行1列,...
  • SQL即结构化查询语言,是关系数据库的标准语言。前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句。需要说明,我们这里只是Qt教程,而非专业的数据库教程,所以我们不会对数据库中的一些知识进行深入讲解,...
  • 我们先看下面的一个例子,将“查询”按钮的槽函数更改如下: void Widget::on_pushButton_clicked() { QSqlQuery query; query.prepare("insert into person(id, firstname,lastname)
  • 然后可以设置他的名字db.setDatabaseName(“”),再到后面我们可以打开它db.open(),打开成功后我们可以对他进行某些操作比如查询:那么又像对文件操作一样,我们得新建一个QSqlQuery Sql对象,然后他负责对数据库...
  • 接着上一篇教程。二,在SQL语句中使用变量...我们先看下面的一个例子,将“查询”按钮的槽函数更改如下:void Widget::on_pushButton_clicked(){ QSqlQuery query; query.prepare(“insert into student (id, name)
  • 注意括号里不可为空,因为表是不可以创建成功的。 例如:   sql_query.prepare( "CREATE TABLE Persons1(id    int,name   varchar(30),slary    int,age int)" ); 在表中插入新行 “INSERT INTO ...
  • 关于postgresql数据库PQexec函数,在多个线程调用执行时,返回值有时为空,且检查结果状态的函数返回也为空,但是命令是执行成功的,数据库里面能查到数据,怎么避免这种情况的发生??还有就是什么原因可能导致...
  • <p>I am building a reporting tool where an user can enter a SQL query and the tool will return the results in a CSV file. In addition to just writing to a CSV file, I also need to perform some ...
  • 使用 QSqlQuery query ; query("SELECT id FROM TABLE1 WHERE id = '2017'); 的到的结果集就是query本身,此时需要使用 query.next指向当前的查询记录的第一条...故可以使用这个来判断结果集是不是为空. 2017-5-18 ...
  • Qt中数据库查询方法

    万次阅读 多人点赞 2017-09-19 22:43:28
    Qt使用QSqlQuery来实现数据的查询QSqlQuery提供了进行SQL语句数据查询,数据处理的用户接口。 QSqlQuery的几个主要方法 1,QSqlQueryQSqlQuery(const QString &query = QString(),QSqlDatabasedb = QSqlDatabase()...
  • 因为实际用到递归查询数据库表中结果,本想用其他语言实现递归select操作,但是发现sql语句自身也可以进行递归查询,而且效率很高,因此就搜了相关的资料,发现网上很多的代码,但是几乎都没有注解。于是我就决定写...
  • 00. 目录 文章目录00....SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase、QSqlQuery、QSqlError、QSqlField、QSqlIndex和QSqlRecord。QSqlDatabase类用于创建数据库连接,QSql
  • 文章目录前言QtSqlQSqlDatabase创建一个数据库示例如下QSqlQuery类介绍打开数据库关闭数据库如何操作数据库创建表格插入数据直接插入:采用占位符?插入采用占位符:XXX 插入大数据批量插入数据方式:更新数据(修改...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 286
精华内容 114
关键字:

qsqlquery查询结果为空