sql语句动态拼接多个查询条件查询数据库
问题描述:
公司开发中自己负责的模块业务需要根据用户选择内容去查询数据库,其中会计期间是必须的条件,用户不选择则默认为当前日期。用户只需要根据需要去输入就可以进行相关查询。不选择不拼接。

直接上图上代码!!!


后台打印sql为:
拼接会计期间 : select * from jyqrsj where f_kjqj = ‘201801’
拼接单位1select * from jyqrsj where f_kjqj = ‘201801’ and((f_ysdw like ‘100010161016’))
拼接单位2select * from jyqrsj where f_kjqj = ‘201801’ and((f_ysdw like ‘100010161016’)) and ((f_yfdw like ‘10001010’))
拼接抵消代码select * from jyqrsj where f_kjqj = ‘201801’ and((f_ysdw like ‘100010161016’)) and ((f_yfdw like ‘10001010’)) and f_dxcode = ‘10009002’
拼接签认类型select * from jyqrsj where f_kjqj = ‘201801’ and((f_ysdw like ‘100010161016’)) and ((f_yfdw like ‘10001010’)) and f_dxcode = ‘10009002’ and F_LXBH in(1002,1003,1004,1005,1006)
select * from jyqrsj where f_kjqj = ‘201801’ and((f_ysdw like ‘100010161016’)) and ((f_yfdw like ‘10001010’)) and f_dxcode = ‘10009002’ and F_LXBH in(1002,1003,1004,1005,1006)

条件全选情况下没有问题。接下来进行条件拼接查询。还是直接上图!!

后台查询结果为:

哈哈,上代码吧!

 TQueryData queryData = new TQueryData();ResultSet rs = null;// 进行sql 语句的动态拼接查询String sql = "select * from jyqrsj";// 原始的数据查询Object kjqj = param.getProperty("KJQJ");// 校验日期Object dwbh1 = param.getProperty("DWBH1");// 单位编号1Object dwbh2 = param.getProperty("DWBH2");// 单位编号2Object dxdwbh = param.getProperty("DXDWBH");// 抵消单位编号Object qrlx = param.getProperty("QRLX");// 签认类型int count = 0;// 必选项不为空时进行where条件拼接if (!(dwbh1.toString().equals("")) || !(dwbh2.toString().equals(""))|| !(dxdwbh.toString().equals(""))|| !(qrlx.toString().equals(""))) {sql = sql + " where ";sql = sql + " f_kjqj = '" + kjqj + "'";System.err.println("拼接会计期间 :  " + sql);if (dwbh1.toString().equals(""))sql = sql + "";else {if (count > 0)sql = sql + "and";sql = sql + " and((f_ysdw like '" + dwbh1 + "')) ";count++;if (dwbh2.toString().equals(""))sql = sql + "";else {if (count > 0)sql = sql + " and ((f_yfdw like '" + dwbh2 + "')) ";count++;}if (dxdwbh.toString().equals(""))sql = sql + "";else {if (count > 0)sql = sql + " and f_dxcode = '" + dxdwbh + "' ";count++;}if (qrlx.toString().equals(""))sql = sql + "";else {if (count > 0)sql = sql + " and F_LXBH in(" + qrlx + ")";count++;}}}rs = conn.createStatement().executeQuery(sql);

需要注意的是:

  1. 水无长形,有些逻辑需要根据自身去改变。例如这个拼接查询条件思想大致为:
  2. 根据数据库表中字段对象,定义一个变量count用来计数。将前台拼接条件做if 的 各个条件的非空判断,所有拼接条件有一个满足条件就进行查询基础表。然后 拼接sql = sql + “where”; 使用where关键字去拼接后面的条件。这个地方我的需求不一样就做了变动。
  3. 注意大括号的使用,如下图 红框处需要注意,已经标注出来。在大括号和count++上踩了坑。

sql语句动态拼接多个查询条件查询数据库相关推荐

  1. 动态SQL语句的拼接实现

    动态SQL语句的拼接实现 平常经常遇到一些语句需要使用动态语句,来实现作业任务的计划执行.例如动态表名,在分表设计时使用了月份格式(A_201912) 在实现此类格式表名的作业任务时,必须采用动态语句 ...

  2. Java中SQL语句的拼接规则

    拼接规则示例 java中的字符串只能双引号,如果字符串中需要拼接变量,该变量用单引号括起来,然后加两个双引号再加两个加号,中间就是变量. 例如:查询数据库中的用户名和密码. 注:为和sql表中的use ...

  3. 报错,sql语句中尽量不要使用*,只查询需要的字段出来

    错误: sql语句中尽量不要使用*,只查询需要的字段出来. 解决: select id,tran_code,tran_name,tran_date,tran_time,tran_amount,1 as ...

  4. 运用设计模式实现Sql语句动态转换

    由于系统面向客户的实际情况不同,对数据库的选择上,有的偏向于Sql Server的易用性和可维护性,有的偏向于Oracle的健壮性和稳定性,而现有代码中Sql语句都大量应用服务器端的函数和关联(Ora ...

  5. Mysql 拼接多个字段作为查询条件查询方法

    最近工作中需要把多个字段拼接作为查询条件查询,特此记录便于日后查阅. <select id="listByProgramCodeList" resultType=" ...

  6. Mysql SQL语句执行更新或者插入添加条件判断

    Mysql SQL语句执行更新或者插入添加条件判断 – 更新操作 – INSERT INTO materials (ID,Name,Remaining,Total) VALUES (1,'SolidW ...

  7. Oracle数据库(一):安装函数查询条件查询

    文章目录 1.课程总介绍 Oracle由来&埃里森的身世 为什么学习Oracle 2.Oracle安装与配置 3.正式学习部分 Oracle体系结构 Oracle和MYSQL的差别 SQL的简 ...

  8. day01 与MySQL的第一次亲密接触基础查询条件查询

    <尚硅谷>MySQL系统课程一共6天,下面介绍第1天的学习内容,主要涉及MySQL的内容介绍.进阶1基础查询和进阶2条件查询.干货满满,跟着课程的进度来的,可能篇幅略长,但是看完一定会有收 ...

  9. MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名

    目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...

  10. Mybatis中动态Sql语句的拼接分析

    一.动态查询 1.方式一: <!--if标签--><!--if中的test属性必须录入,其内部为ognl表达式,不需要#{}.如果test内满足,则主体语句执行--><s ...

最新文章

  1. 鹅厂是如何使用 Git 的?
  2. Maven发布封装到中央仓库时候报错:no default secret key: No secret key
  3. SpringBootStarter种类
  4. Spring AOP学习
  5. 直播预告丨聚焦银行数字化运营体系搭建,助力银行构建核心竞争力
  6. VIM 使用技巧(常用提取)
  7. (收藏)[Unix] vi基本操作方法
  8. python xposed_Xposed及类Xposed框架收集
  9. 【LeetCode笔记】22.括号生成(Java、DFS回溯、剪枝、括号)
  10. 打印服务器打印文件,通过打印服务器远程打印文件
  11. javaweb学习总结七(XML语言作用、语法)
  12. win7系统可以禁止的服务器,win7旗舰版怎么禁用不必要的系统服务项
  13. 蛋白工厂(rRNA)和物流系统(tRNA)的识别鉴定-Barrnap,Infernal和tRNA-scan-SE
  14. led时间代码html,LED旋转时钟制作(有源代码)
  15. 时间,是个什么东东?
  16. odi连接oracle数据库,通过ODI接口把数据从Oracle数据库抽到HIVE数据库怎么解决
  17. 深度多模态子空间聚类网络+代码实现
  18. 什么是虚拟主播?虚拟数字人直播,不用出镜,不用露脸的直播方式
  19. substr函数功能
  20. c语言表达式有时候从左向右,C语言的条件表达式从右向左结合怎么理解

热门文章

  1. 《游戏引擎架构》信息总汇
  2. canpro脚本_canpro协议分析平台
  3. matlab自带滤波器,matlab自带滤波器函数小结(图像处理)
  4. 免费html转换成word,如何免费将网页内容转成Word文档
  5. pythonpost请求json_将JSON字符串作为post请求发送
  6. godaddy无法修改域名服务器,godaddy的DNS A记录不能修改原因
  7. win10设置计算机关机时间,Win10怎么设置自动关机时间_Win10设置自动关机教程-192路由网...
  8. java中向上的尖括号是什么_T(尖括号)在Java中是什么意思?
  9. 交换机和路由器技术-28-OSPF的NSSA区域
  10. Excel2016如何添加表格边框?分享技巧!怎样在excel加入表格边框?