SQL WHERE IN参数化编译写法简单示例

来源:脚本之家  责任编辑:小易  

SELECT * FROM [original$] WHERE [SHIPMENTID] in (&

前言

最近在一次使用sql中的where in语句时,造成了一些非预期的查询结果。尤其是在代码中去编写并执行sql语句时,会出现一些意外情况。再查阅了一些资料以及手动测试后,发现是自己sql语句写法存在问题,在此记录。

where 后面是一个条件式,表示要找出满足这个条件的结果in 里面是个子查询或者给定的值

例子

业务需求,需要通过SQL语句从asset资产表中查询域名字段在(“thief.one”,”nmask.cn”,”sec.thief.one”)范围内的数据库记录,SQL语句该怎么写呢?

in 里面不同的id是要用逗号隔开的in(1@,2@) 如果i是字符型的 每个id 都要加上单引号

拼接法(错误)

1) inselect * from tab where field in ('A

从提升性能和安全的角度(防注入)来讲,建议使用参数化方式来处理。示例如下://实例化Conn

values = "'thief.one','nmask.cn','sec.thief.one'" sql = "select * from asset where domain in ("+values+")" print sql

我觉得也不尽然。。。。以前我家养了一只猫,波斯猫!大概两三岁的时候被别人偷了。。。。又过了一年左右的一个晚上,猫咪居然自己跑回来了,在我窗户外面叫。。。。。当然认出来是我家以前的猫咪想去捉它的时候,也不知道为什么它就跑开两三米,然后盯着我瞄瞄叫唤。。。。等了一会儿再去捉它才捉住,一捉住过后就对我很亲热,各种蹭!也遇到两条狗,经常一起耍的,出去求学一年后回去,看到它们想去摸一摸。。。。结果被咬了

说明:通过将搜索条件以字符串拼接的方式构造sql语句,语法上可通过,但存在着安全隐患(参照sql注入漏洞)

首先我们先来看看nubiaZ17的参数规格:nubiaZ17是第一款配备8GB内存的骁龙835手机,标配6GB内存,有64和128两种容量可选,UFS2.1规格。骁龙835芯片基于三星10nm工艺制程打造,主频为1.9GHz+2.45GHz,采用八核心设计,大小核均为Kryo280架构,整合了Cat.16基带。下面我们用跑分工具对nubiaZ17的性能进行理论测试。1、安兔兔↑↑↑安兔兔跑分↑↑↑通过对比看出,nubiaZ17所搭载的骁龙835跑分远远超过了麒麟960、骁龙821,但比iPhone7Plus所搭载的A10Fusion还略逊一点点。2、GeekBench跑分↑↑↑GeekBenc

参数化1(错误)

公允的说,贾跃亭在乐视初创时期是不可能经济诈骗的。更不能说他创业失败了,而是创业成功了。标志就是成功的成为上市公司。创业公司成为上市公司都不算成功,那成功的标志是什么?他的失败不叫"创业失败",而是经营失败。他的"经济诈骗"(这四个字不具法律意义)是从经营失败开始的。乐视网上市(不管上市过程有多少猫腻)给贾跃亭带来了巨大的纸上财富,而要把纸上财富变成安放在自己保险箱里的真金白银,是需要能力和智慧的。一是通过上市募集的巨额资金,发展壮大乐视网,以出色的经营获得利润,回报投资者,同时集累自己的财富。然而这是一条漫长和艰辛的过程,同时也充满了各种不确定性和风险。二是通过"经济诈骗"快速的把真金白银搞

艺术不分国界,但做艺术的人分了国界。只有人也不分国界的时候才能真正做到艺术不分国界。很典型的例子:最近大火的电影(战狼2)在国内观众来看是爱国,我们自己的英雄主义(美国电影这种类型的电影有很多)。但到了国外,大量媒体和网民铺天盖地批评这是“”中国民族主义“”,那为什么美国电影上映时没人批评“”美国民族主义“”呢?为什么美国可以有英雄而中国不能有自己的英雄呢?为什么我们自己的英雄被国外称为恐怖分子一样的“民族主义”呢?为什么?主要是这关系到某些集团甚至“”国家利益“”,中国有了自己的电影英雄就不再迷信美国大片里的虚幻英雄,这会影响到美国大片以后在中国的票房。往大了说,美国的价值观以后受众群体会缩

values = (("thief.one","nmask.cn","sec.thief.one"),) sql = "select * from asset where domain in %s" print sql print values

说明:通过参数化方式,将where in 后面的查询内容传入。表面上看没问题,但在编译过程中,会将(“thief.one”,”nmask.cn”,”sec.thief.one”)整体看成一个字符串,而作为查询条件,与需求不符合。

参数化2(正确)

艺术不分国界,但做艺术的人分了国界。只有人也不分国界的时候才能真正做到艺术不分国界。很典型的例子:最近大火的电影(战狼2)在国内观众来看是爱国,我们自己的英雄主义(美国电影这种类型的电影有很多)。但到了国外,大量媒体和网民铺天盖地批评这是“”中国民族主义“”,那为什么美国电影上映时没人批评“”美国民族主义“”呢?为什么美国可以有英雄而中国不能有自己的英雄呢?为什么我们自己的英雄被国外称为恐怖分子一样的“民族主义”呢?为什么?主要是这关系到某些集团甚至“”国家利益“”,中国有了自己的电影英雄就不再迷信美国大片里的虚幻英雄,这会影响到美国大片以后在中国的票房。往大了说,美国的价值观以后受众群体会缩

values = ("thief.one","nmask.cn","sec.thief.one") sql = "select * from asset where domain in ({})".format(",".join(['%s' for i in values])) print sql print values

说明:通过计算values里面字符串个数,动态构造编译的参数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

怎么写关于“IN”操作符的SQL语句的参数化命令

根据你说的描述,应该是EntityFramework(实体框架)、LinqToSQL或者Lamda表达式,关键是Linq。下面我给你点示例代码你看是不是。public void LinqToSqlGroupBy04() { var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, AveragePrice = g.Average(p => p.UnitPrice) }; ObjectDumper.Write(q, 1);}public void LinqToSqlWhere05() { var q = db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued); ObjectDumper.Write(q, 0);}

求助java中sql语句中in条件如何参数化

应该是EntityFramework(实体框架)、LinqToSQL或者Lamda表达式,关键是Linq。下面我给你点示例代码你看是不是。public void LinqToSqlGroupBy04() { var q = from p in db.Products group p by

SQL where in条件的问题

SQL 语句中In 和 Where 的含义不同。

应用解释如下:

1、如需有条件地从表中选取、删除、更新数据时,使用Where;

2、In只作为Where条件子句下的一个运算符,除了In之外还有Between、Like、=、>、>=、<、<=等运算符。

下面举例说明:

1、查询名字为A和B的学生,则语句为

Select * from student where name in('A','B');

JDBC SQl 语句 IN 参数的格式是什么

需要使用for循环拼接参数,不能直接这样操作

SELECT * FROM TABLE_A WHERE A_NAME IN(?)

ps.setString(1,"想要拼的字符串");这种写法严重错误

SQL where in 语句顺序问题

你的语句有问题应该这样

select id , name from test where id in('1001','1005','1003');

如果你想按顺序的话 这样就可以

select id , name from test where id='1001'

union all

select id , name from test where id='1005'

union all

select id , name from test where id='1003'

  • 本文相关:
  • mysql的where语句中between与in的使用教程
  • mysql 存储过程传参数实现where id in(1,2,3,...)示例
  • 解析sql语句中left_join、inner_join中的on与where的区别
  • 程序员应该知道的数据库设计的两个误区
  • mssql内连接inner join查询方法
  • 数据库 三范式最简单最易记的解释
  • 复杂系统中的用户权限数据库设计解决方案
  • maven nexus 安装nexus私服出现的问题和解决办法
  • sql小计汇总 rollup用法实例分析
  • sql四舍五入、向下取整、向上取整函数介绍
  • sql数据库与oracle数据库镜像有什么不同对比
  • 推荐sql server一些常见性能问题的解决方法
  • 数据库语言分类ddl、dcl、dml详解
  • 怎么写关于“IN”操作符的SQL语句的参数化命令
  • 求助java中sql语句中in条件如何参数化
  • SQL where in条件的问题
  • JDBC SQl 语句 IN 参数的格式是什么
  • SQL where in 语句顺序问题
  • sql用select * from xx where in ("","...
  • sql中,In和where的区别是啥
  • sql语句中in的用法
  • 数据库中 in on,with等关键字的用法及示例,请高手帮忙!!!!!
  • sql查询语句的where条件里可以使用参数吗?
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved