SQL动态语句查询
来源:互联网 发布:mac python idle 中文 编辑:程序博客网 时间:2024/04/19 23:12
要实现这种动态的SQL语句拼装,我们可以在宿主语言中建立一个字符串,然后逐个判断各个复选框是否选中来向这个字符串中添加SQL语句片段:
String sql = "select * from employee where 1=1";if(工号复选框选中){sql.appendLine("and number between "+工号文本框内容一+"and"+工号文本框内容二);}if(姓名复选框选中){sql.appendLine("and name like '%"+姓名文本框内容一+"%'");}if(年龄复选框选中){sql.appendLine("and age between "+年龄文本框内容一+"and"+年龄文本框内容二);}executeSQL(sql);
这看似非常优美的解决了问题,殊不知这样很可能会造成非常大的性能损失,因为使用添加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的时候查询速度会非常慢。因此如果数据检索对性能有比较高的要求就不要使用这种“简便”的方式。下面给出一种参考实现,伪代码如下:
private void doQuery(){Boolean hasWhere = false;String sql = "select * from employee";if(工号复选框选中){hasWhere = appendWhereIfNeed(sql, hasWhere);sql.appendLine("number between "+工号文本框内容一+"and"+工号文本框内容二);}if(姓名复选框选中){hasWhere = appendWhereIfNeed(sql, hasWhere);sql.appendLine("name like '%"+姓名文本框内容一+"%'");}if(年龄复选框选中){hasWhere = appendWhereIfNeed(sql, hasWhere);sql.appendLine("age between "+年龄文本框内容一+"and"+年龄文本框内容二);}executeSQL(sql);}private Boolean appendWhereIfNeed(StringBuilder sql,Bool hasWhere){if(hasWhere==false){sql. appendLine("WHERE");}else{sql. appendLine("AND");}return true;}
0 0
- SQL动态语句查询
- Mybatis动态Sql语句查询
- 在ibatis 拼接sql语句,动态查询
- 在ibatis 拼接sql语句,动态查询
- Sqlserver 动态sql查询语句的编写
- LINQ to SQL语句之动态查询
- 根据条件查询动态拼接sql语句
- 动态sql语句拼接查询条件
- Mybatis 模糊查询和动态sql语句
- LINQ to SQL语句之动态查询高级特性
- LINQ to SQL语句(23)之动态查询
- 开发动态SQL之处理多行查询语句
- LINQ to SQL语句(23)之动态查询
- 在ibatis框架中 拼接sql语句,动态查询 .
- 游标遍历exec动态sql语句查询结果
- MyBatis中动态SQL语句完成多条件查询
- Jfinal适用于条件查询的动态SQL语句生成工具
- Spring Boot Jpa之构建动态SQL查询语句
- 一些程序函数 C++语言,找数组中弟第K大的数和自己写的子符串截取函数
- Android 组件安全
- java之 ------ JUnit、注解、类加载器
- 制作自己的MFC MDI OPENCV程序框架
- rounding to an arbitrary number of significant digits
- SQL动态语句查询
- Maximum Product Subarray —— Leetcode
- 2014 iOS开发者收入调查报告(二):企业开发者篇
- Objective-C 点语法
- CI框架源码阅读笔记6 扩展钩子 Hook.php
- webapp开发要点记录
- 记录 -- 关于xcode6.2 创建.framework工程
- xgboost学习之windows下python版本安装
- Python-全局变量VS局部变量