(本文只是总结网络上的教程)

在操作数据库

SQL语句中难免会用到变量

比如

在條件值已知的情況下
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
SELECT * FROM Persons WHERE FirstName='Bush'
在条件值是變量的情況下
INSERT INTO table_name (列1, 列2,...) VALUES (變量1, 變量2,....)
SELECT * FROM Persons WHERE FirstName='變量'
或者SELECT * FROM Persons WHERE 變量='變量'
 
 
方法据我所知有两种
1:用query的绑定特性来做
2:利用字符串特性,来组合SQL字符串(+,&,arg())详情可参考qstring,string用法
(提示:qstring在执行sql语句时相当有用,当深入研究之
http://developer.qt.nokia.com/doc/qt-4.8/qstring.html
http://www.kuqin.com/qtdocument/qstring.html
http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QString.html
http://ibeyond.blog.51cto.com/1988404/373948
百度文库也有个很好的官方ppt  讲的QT 数据类型  也可以参考之

第一步:
简单介绍下qstring常用操作

1-----------------組合1-----

把str添加到字符串中并且返回结果的引用。

string = "Test";

string.append( "ing" );       // string == "Testing"

等于operator+=()。

2-------------------組合2-------

QString firstName( "Joe" );

QString lastName( "Bloggs" );

QString fullName;

fullName = QString( "First name is '%1', last name is '%2'" )

.arg( firstName )

.arg( lastName );

// fullName == First name is 'Joe', last name is 'Bloggs'

QString str;

str = QString( "Decimal 63 is %1 in hexadecimal" )

.arg( 63, 0, 16 );

// str == "Decimal 63 is 3fin hexadecimal"

3------------------組合3--------+,+=

QString str = "1234";

cout << &str << endl;

str += str;

cout << qPrintable(str) <<endl;

str = str + "5678";

cout << qPrintable(str) <<endl;

4----------------檢測是否為空

QString a( "" );

a.isEmpty();        // 真

a.isNull();         // 假

QString b;

b.isEmpty();        // 真

b.isNull();         // 真

如果它不是零字符串,返回真,否则返回假。

QString name =getName();

if ( !name )

name = "Rodney";

5------------------转换
int  转 QString
int a=10;
QString b;
b=QString::number(a) QString 转int
QString a="120"
int b;
b=a.toInt()


第二步:
回顧一下QT下操作,顯示數據庫的方法
底層數據庫:SQLITE,MYSQL,MSSQL,ACCESS,ORACLE…….
中間層處理:QUERY,QUERYMODEL,TABLEMODEL,RetinoalTABLEMODEL
頂層顯示:DEBUG(MSGBOX),TABLEVIEW,TREEVIEW,TABLEWIDGET,COMBOX
 

第三步:


 
下面總結下在不同中間層的情況下,待變量SQL語句的執行方法
這裡只介紹查詢和插入的方法,關於更新方法類似
1----------------------使用query做中間層
SQL查詢:
SQL插入:
2----------------------使用querymodel做中間層
查詢:
插入:
 
3----------------------使用tablemodel做中間層
查詢:
插入:
 
4----------------------使用T-tablemodel做中間層
查詢:
插入:

1----------------------使用query做中間層(绑定或组合SQL字符串)

SQL查詢:(主要是用的綁定,其他捆綁方法可查詢幫助文檔,或者參考插入的sql語句格式)
QSqlQuery query; 
query.prepare("select name from student where id = ?"); 
int id = ui->linetext->value(); //从界面获取id的值 
query.addBindValue(id); //将id值进行绑定 
query.exec();
SQL插入:
(ODBC)
QSqlQuery query; 
query.prepare("insert into student (id, name) values (:id, :name)"); 
query.bindValue(0, 5); 
query.bindValue(1, "sixth"); 
query.exec();
或者用名稱進行索引
query.prepare("insert into student (id, name) values (:id, :name)"); 
query.bindValue(":id", 5); 
query.bindValue(":name", "sixth"); 
query.exec();
(ORACLE)
query.prepare("insert into student (id, name) values (?, ?)");
query.bindValue(0, 5);
query.bindValue(1, "sixth"); 
query.exec();
或者省去索引
query.prepare("insert into student (id, name) values (?, ?)"); 
query.addBindValue(5); 
query.addBindValue("sixth"); 
query.exec();
批量插入:
QSqlQuery q; 
q.prepare(“insert into student values (?, ?)”); 
QVariantList ints; ints << 10 << 11 << 12 << 13; 
q.addBindValue(ints); 
 
QVariantList names; names << “xiaoming” << “xiaoliang” << “xiaogang” << 
QVariant(QVariant::String); //最后一个是空字符串,应与前面的格式相同 
q.addBindValue(names); 
 
if (!q.execBatch()) //进行批处理,如果出错就输出错误 
qDebug() << q.lastError();



2----------------------使用querymodel做中間層(组合SQL字符串法可参考3)

    QString name = userNameLine->text();
    QString passwd = userPwdLine->text();
    QString sql = "select name, password from users where name = '"
        + name + "'and password ='" + passwd + "'";
查詢:
QSqlQueryModel *model = new QSqlQueryModel; 
model->setQuery(“select * from student”);
插入:
 

3----------------------使用tablemodel做中間層(组合sql字符串法)

    QString name = userNameLine->text();
    QString passwd = userPwdLine->text();
    QString sql = "select name, password from users where name = '"
        + name + "'and password ='" + passwd + "'";
查询
     QSqlTableModel *model = new QSqlTableModel;
     model->setTable("employee");
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();
     model->removeColumn(0); // don't show the ID
     model->setHeaderData(0, Qt::Horizontal, tr("Name"));
     model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
 
     QTableView *view = new QTableView;
     view->setModel(model);
     view->show();
條件查詢:
QString name = ui->lineEdit->text(); 
model->setFilter(QObject::tr(“name = ‘%1′”).arg(name)); //根据姓名进行筛选 
model->select(); //显示结果
分類
model->setSort(0,Qt::DescendingOrder); 
model->select();
插入:
int rowNum = model->rowCount(); //获得表的行数 
int id = 10; model->insertRow(rowNum); //添加一行 
model->setData(model->index(rowNum,0),id);


4----------------------使用Relationaltablemodel做中間層(组合SQL字符串法)

查詢:
插入:
 

SQL 变量 条件查询 插入数据的更多相关文章

  1. C# 将Access中时间段条件查询的数据添加到ListView中

    C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Col ...

  2. util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案

    ylbtech-funcation-util:  C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...

  3. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  4. 使用变量向SQL Server 2008中插入数据

    QT通过ODBC连接数据库SQL Server 2008,进行数据插入时遇到的问题: 先把数据存入变量中,如何使用变量进行插入?插入语句该怎么写? QSqlQuery query(db); query ...

  5. SQl server 关于重复插入数据的测试

    最近发布的脚本,有那种防止重复插入数据(包括存在时更新,不存在是插入的处理,判断的方向可能与下面的示例相反) 使用类似下面的 SQL declare @id int, @value int if no ...

  6. SQL Server 2008 批量插入数据时报错

    前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...

  7. 【.Net】C# 将Access中时间段条件查询的数据添加到ListView中

    一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加 ...

  8. 解决pl/sql developer中数据库插入数据乱码问题

    最近学习SSM项目开发,用到oracle数据库, 使用管理软件PL/sql developer往数据库表中插入数据时记录乱码.  结果如下: 可以看到中文数据都乱码成了???????问号, 看了网上各 ...

  9. SQL多条件查询安全高效比较

    ALTER PROCEDURE _tmp @ID VARCHAR(50), @PN VARCHAR(50), @Type INT AS BEGIN /************************* ...

随机推荐

  1. BZOJ4977 跳伞求生(贪心)

    如果现在选定了一些要求消灭的敌人而不考虑积分,显然应该让每个敌人被刚好能消灭他的人消灭.再考虑最大化积分,显然我们应该优先消灭ci-bi大的敌人,所选用的a也应尽量大.于是按ci-bi从大到小排序,用 ...

  2. BZOJ4892 Tjoi2017dna(后缀数组)

    对每个子串暴力匹配至失配三次即可.可以用SA查lcp.然而在bzoj上被卡常了.当然也可以二分+哈希或者SAM甚至FFT. #include<iostream> #include<c ...

  3. 题解 P1628 【合并序列】

    看到这个题,小金羊第一秒的反应就是: 优先队列可解! 看到楼上某同学一个个比较, find()函数是时候现身了! string//类型库 //find具体用法可以自行百度 //这里仅说这里的用法(逃) ...

  4. Find the hotel HDU - 3193(RMQ)

    题意: 有n个旅馆,从这n个旅馆中找出若干个旅馆,使得这若干个旅馆满足这样的条件:不能从其它和剩下的旅馆中找到一个价格和距离都小于这个旅馆的旅馆... 解析: 按price 排序,若price相同, ...

  5. 代码收藏系列--php--加载sql文件并解析成数组

    php加载sql文件,解析成以分号分割的数组.(支持存储过程和函数提取,自动过滤注释) /** * 加载sql文件为分号分割的数组 * <br />支持存储过程和函数提取,自动过滤注释 * ...

  6. 认识Java标识符

    标识符定义 认识Java标识符 在编程语言中,标识符就是程序员自己规定的具有特定含义的词,比如类名称,属性名称,变量名等. 问:标识符是神马? 答:标识符就是用于给 Java 程序中变量.类.方法等命 ...

  7. AI技术说:人工智能相关概念与发展简史

    作为近几年的一大热词,人工智能一直是科技圈不可忽视的一大风口.随着智能硬件的迭代,智能家居产品逐步走进千家万户,语音识别.图像识别等AI相关技术也经历了阶梯式发展.如何看待人工智能的本质?人工智能的飞 ...

  8. 使用OAuth2.0协议的github、QQ、weibo第三方登录接入总结

    目录 第三方接入总结 OAuth2.0介绍 github OAuth2.0登录接入 国内第三方应用商SDK使用 微博SDK 腾讯QQ SDK passport.js插件使用 安装 相关中间件.路由 返 ...

  9. Linux下调整根目录的空间大小

    原文 一.目的 在使用CentOS6.3版本Linux系统的时候,发现根目录(/)的空间不是很充足,而其他目录空间有很大的空闲,所以本文主要是针对现在已有的空间进行调整.首先,先来查看一下系统的空间分 ...

  10. 面试的角度诠释Java工程师

    原文出处: locality 一.基础篇 1.面向对象的三大特性 继承.封装.多态 什么是继承?①继承是面向对象程序设计能够提高软件开发效率的重要原因之一.②继承是具有传递性的,就像现实中孙子不仅长得 ...