SQL 变量 条件查询 插入数据
(本文只是总结网络上的教程)
在操作数据库时
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 WHEREFirstName='變量'
或者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 变量 条件查询 插入数据的更多相关文章
- C# 将Access中时间段条件查询的数据添加到ListView中
C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Col ...
- util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
ylbtech-funcation-util: C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...
- Mybatis中动态SQL多条件查询
Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...
- 使用变量向SQL Server 2008中插入数据
QT通过ODBC连接数据库SQL Server 2008,进行数据插入时遇到的问题: 先把数据存入变量中,如何使用变量进行插入?插入语句该怎么写? QSqlQuery query(db); query ...
- SQl server 关于重复插入数据的测试
最近发布的脚本,有那种防止重复插入数据(包括存在时更新,不存在是插入的处理,判断的方向可能与下面的示例相反) 使用类似下面的 SQL declare @id int, @value int if no ...
- SQL Server 2008 批量插入数据时报错
前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...
- 【.Net】C# 将Access中时间段条件查询的数据添加到ListView中
一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加 ...
- 解决pl/sql developer中数据库插入数据乱码问题
最近学习SSM项目开发,用到oracle数据库, 使用管理软件PL/sql developer往数据库表中插入数据时记录乱码. 结果如下: 可以看到中文数据都乱码成了???????问号, 看了网上各 ...
- SQL多条件查询安全高效比较
ALTER PROCEDURE _tmp @ID VARCHAR(50), @PN VARCHAR(50), @Type INT AS BEGIN /************************* ...
随机推荐
- 第91天:CSS3 属性选择器、伪类选择器和伪元素选择器
一.属性选择器 其特点是通过属性来选择元素,具体有以下5种形式: 1.E[attr] 表示存在attr属性即可: div[class] 2.E[attr=val] 表示属性值完全等于val: ...
- 转---秒杀多线程第十二篇 多线程同步内功心法——PV操作上 (续)
PV操作的核心就是 PV操作可以同时起到同步与互斥的作用. 1.同步就是通过P操作获取信号量,V操作释放信号量来进行. 2.互斥其实就是,同时操作P操作,结束后进行V操作即可做到. Java上实现PV ...
- Robotframework SSHLibrary库关键字
1.连接远程机器 两种方法,一种用户名密码登录连接,一种是通过密钥连接 (1)用户名密码连接 (2)密钥连接 大概介绍下密钥:首先由用户生成一对密码,公钥与私钥:私钥是给需要连接的用户,连接时使用私钥 ...
- Notepad++查找和替换空行/空格/换行
Notepad++查找和替换支持正则表达式,功能很强大,但比较复杂因此暂不研究 Notepad++使用正则表达式查找,首先需要勾选查找/替换窗口左下部的“正则表达式(E)”\r\n表示换行,其中\r表 ...
- Java (Socket,ServerSocket)与(SocketChannel,ServerSocketChannel)区别和联系
Socket 和ServerSocke 是一对 他们是java.net下面实现socket通信的类SocketChannel 和ServerSocketChannel是一对 他们是java.nio下面 ...
- LUCAS定理简述
Lucas定理解决的是n,m比较大而p是小于100000质数 简而言之就是Lucas(n,m)=C(n%p,m%p)*Lucas(n/p,m/p)%p; 其中组合数C是用任意一种计算10五次方内取模的 ...
- powerdesigner中物理模型与sql脚本的以及与数据库的连接设置
使用JDBC连接失败的解决方案: http://blog.csdn.net/t37240/article/details/51595097 使用powerdesigner工具我们可以方便的根据需求分析 ...
- linux 版本查询
原文 : http://www.ha97.com/2987.html 一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@localhost ~]# ca ...
- 居中div,居中浮动的元素
定位法:position:absolute 如果子级div有定义宽和高的话就可以用这个方法.注意:margin-top,和margin-left的值均为高和宽值的一半 margin:auto法 这个也 ...
- AJAX 状态值与状态码详解
1- AJAX状态值与状态码区别 AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤.如:正在发送,正在响应等,由AJAX对象与服务器交互 ...