SQL拼接小技巧(一)

# SQL拼接小技巧(一) #

2018/6/21 18:54:36

----------

**关键字:  SQL , 1 = 1 ,1 = 2**

----------

如下代码中SQL拼接使用了1=1和1=2防止请求参数中条件为空或SQL注入的方式猜测表名,字段名

public DomainPage<RealNameVerifyInfo> getVerifyList(String vin, String name, String phoneNum, String status,

String dealerCode, String type, long startTime,

long endTime, int pageIndex, int pageSize) {

StringBuilder sb = new StringBuilder("SELECT * FROM REAL_NAME_VERIFY_INFO r WHERE 1 = 1 ");

if (StringUtils.isNotBlank(vin)) {

sb.append(" and r.vin like ‘%").append(vin).append("%‘ ");

}

if (StringUtils.isNotBlank(name)) {

sb.append(" and r.userName = ‘").append(name).append("‘");

}

if (StringUtils.isNotBlank(dealerCode)) {

sb.append(" and r.dealerCode = ‘").append(dealerCode).append("‘");

}

if (StringUtils.isNotBlank(type)) {

sb.append(" and r.type = ‘").append(type).append("‘");

}

if (StringUtils.isNotBlank(phoneNum)) {

sb.append(" and r.phoneNum = ‘").append(phoneNum).append("‘");

}

if (startTime > 0) {

sb.append(" and r.createdTime >= ‘").append(DateUtilsXX.dateToString(new Date(startTime), 1)).append("‘");

}

if (endTime > 0) {

sb.append(" and r.createdTime < ‘").append(DateUtilsXX.dateToString(new Date(endTime), 1)).append("‘");

}

if (StringUtils.isNotBlank(status)) {

String[] var1 = status.split(",");

sb.append(" and ( 1 = 2 ");

for (String var2 : var1) {

if (var2.equals("VERIFYING")) {

sb.append(" or ( r.status = ‘VERIFYING‘ )");

} else if (var2.equals("SUCCEED")) {

sb.append(" or ( r.status = ‘SUCCEED‘ )");

} else if (var2.equals("FAILED")) {

sb.append(" or ( r.status = ‘FAILED‘ )");

}

}

sb.append(" ) ");

} else {

sb.append(" and r.status != ‘").append(VerifyStatus.UNVERIFY).append("‘");

sb.append(" and r.status != ‘").append(VerifyStatus.SUBMITED).append("‘");

sb.append(" and r.status != ‘").append(VerifyStatus.PIC_DEALING).append("‘");

sb.append(" and r.status != ‘").append(VerifyStatus.PIC_WAITING).append("‘");

sb.append(" and r.status != ‘").append(VerifyStatus.CANCEL).append("‘");

sb.append(" and r.status != ‘").append(VerifyStatus.SUBMITTING).append("‘");

}

String sql = sb.toString();

Query query = em().createNativeQuery(" SELECT a.* FROM ( " + sql + " ORDER BY r.createdTime DESC ) as a  GROUP BY a.vin ORDER BY a.createdTime DESC", RealNameVerifyInfo.class);

log.info(" SELECT a.* FROM ( " + sql + " ORDER BY r.createdTime DESC ) as a  GROUP BY a.vin ORDER BY a.createdTime DESC ");

query.setFirstResult((pageIndex - 1) * pageSize);

query.setMaxResults(pageSize);

List<RealNameVerifyInfo> verifyInfoList = query.getResultList();

query = em().createNativeQuery(" SELECT count(*) FROM ( " + sql + " GROUP BY r.vin ) as a");

long count = Long.parseLong(String.valueOf(query.getResultList().get(0)));

DomainPage domainPage = new DomainPage(pageSize, pageIndex, count);

domainPage.setDomains(verifyInfoList);

//log.info("verifyInfoList" + JSONUtil.writeValueAsString(verifyInfoList));

//log.info("domainPage" + JSONUtil.writeValueAsString(domainPage));

return domainPage;

}

原文地址:https://www.cnblogs.com/zhangqingyan/p/9210578.html

时间: 2024-08-27 13:28:34

SQL拼接小技巧(一)的相关文章

sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0

1. 安装 Microsoft SQL Server Compact 4.0  https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17876   2. 在vs2013里安装 SQL Server Compact & SQLite Toolbox 3.   sql server 小技巧 集锦

SQL SERVER 小技巧

SQL SERVER 小技巧(不用exec实现in()的功能) declare @x varchar(20) SET @x='1,2,3' SELECT @x select * from data0001 where charindex(','+ltrim(rkey)+',',','[email protected]+',')>0 --====================== SQL SERVER 小技巧(多行数据转字符串a,b,c...的写法) declare @Colstr varcha

sql查询语句的拼接小技巧(高手勿喷)

1. 基本的查询语句后面加上 WHERE 1=1,便于增加查询条件. ASkStr := 'select * from Twork where 1=1 '; if length(cxTEworkid.Text) <> 0 then begin ASkStr := ASkStr + ' and GWORKID like ' + quotedstr('%' + cxTEworkid.Text + '%') end; 2. 多表查询可以用一个字符串代替一个表.逻辑上更清晰. WorkTable =

Javascript字符串拼接小技巧

在Javascript中经常会遇到字符串的问题,但是如果要拼接的字符串过长就比较麻烦了. 如果是在一行的,可读性差不说,如果要换行的,会直接报错. 在此介绍几种Javascript拼接字符串的技巧. 字符串相加(+) var items = '<li class="details">' + '<span>Hello world</span>' + '</li>'; 利用反斜线拼接字符串 var items = '<li class=

SQL Server 一些使用小技巧

原文:SQL Server 一些使用小技巧 1.查询的时候把某一个字段的值拼接成字符串 以下是演示数据. 第一种方式:使用自定义变量 DECLARE @Names NVARCHAR(128) SET @Names='' -- 需要先赋值为空字符串,不然结果会是 null SELECT @Names=@Names+S_Name+',' -- S_Name 类型为字符串类型,如果不能隐示转换,就需要强制转换 FROM Student SELECT @Names 这种方法有一个好处就是,拼接出来的字符

数据库大师成长日记:巧用SQL语句,小技巧解决大问题!

朋友们,我们在写SQL脚本的时候,可能一些看起来不起眼的小问题.却让我们非常头疼.比如我们要写一个备份数据库的脚本,如果我们对服务器的硬盘分区和使用情况很了解,备份当然没有问题,但如果我们不知道服务器硬盘如何分区.每个分区还有多少空间可用的情况下,您写的备份语句可能就不好执行了. 下面,我就日常我们可能会碰到的一些"大问题",通过简单的SQL脚本进行实现. 查看硬盘分区与可用空间 这个通过调用master数据库下面的存储过程xp_fixeddrives很容易实现. EXEC maste

sql里的多行多列转一行多列小技巧

---恢复内容开始--- [ 今天下午接受了一个紧急小任务,是将一组比赛记录统计出来,将象棋游戏玩家的两条记录在一行里面显示,进数据库看之后是首先想到的是行转列,但是一开始就觉得不对,后来写到一半确实不对,后来上网查询了半天多行多列转一行多列,发现又要写算法又要写函数,看了实在头疼,不想这么麻烦.于是自己突然间灵机一动,闪过一个小想法,立马实施,就是将所有记录前面都加上一个标识列num(row_number()函数),然后用case 判断奇偶行在显示,就行了. select row_number

Scrapy小技巧-MySQL存储, MYSQL拼接

这两天上班接手,别人留下来的爬虫发现一个很好玩的 SQL脚本拼接. 只要你的Scrapy Field字段名字和 数据库字段的名字 一样.那么恭喜你你就可以拷贝这段SQL拼接脚本.进行MySQL入库处理. 具体拼接代码如下: def process_item(self, item, spider): if isinstance(item, WhoscoredNewItem): table_name = item.pop('table_name') col_str = '' row_str = ''

.Net开发小技巧

.NET项目开发中的小技巧 1.不要频繁的创建对象...这个损失是巨大的...new太多了,后果比较严重. 2.打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系,用Using满足你偷懒的欲望吧 3.别太迷信string str1 = "";和string.empty之间的差异,性能上和你想的完全不一样.放心大胆的使用""吧. 4.如果你的项目比较大,或者你的IIS服务器配置不太高,那么,我还是建议你多用存储过程,减少前端服务器的