问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jdbc preparedstatement可以用来进行动态查询吗

发布网友 发布时间:2022-04-23 11:30

我来回答

2个回答

懂视网 时间:2022-05-05 07:26

在网络开发中,多种条件的综合查询非常常见,应对这种业务需求我们通常使用下面几种方法来实现:
1.直接将参数值拼接到SQL语句中,然后进行查询。
这种方式的安全性应当说是比较差的,一不小心就被SQL注入了。虽然可以先过滤参数值中的特殊字符,但总感觉不是很优雅。
2.先使用占位符'?'来拼接SQL,然后再通过条件判断去填充的PreparedStatement。
用过这种方式的TX,都知道这种方式的复杂性。先要在拼SQL时判断一次,然后还要在填充PST时再判断一次,麻烦。
3.过程存储
的档案本人一直不爽的存储过程,以前有一个项目从MySQL的迁移到MSSQL,后来又换成ORACLE,最后产品的不同版本运行在不同数据库上,当时差点要了亲命了。
其实讲 么多无非就是想要一种相对优雅简单的查询方式,前一段看到.NET中的提供SQLHelper受到一些启发,然后就写了这么一个类似的组件(其实我谷歌了半个小时都没有找到符合要求的基础

1.什么是动态查询?

从多个查询条件中随机选择若干个组合成一个DQL语句进行查询,这一过程叫做动态查询。

2.动态查询的难点

可供选择的查询条件多,组合情况多,难以一一列举。

3.最终查询语句的构成

一旦用户向查询条件中输入数据,该查询条件就成为最终条件的一部分。

二 基本原理

1.SQL基本框架

无论查询条件如何,查询字段与数据库是固定不变的,这些固定不变的内容构成SQL语句的基本框架,如

select column... from table。

2.StringBuilder形成DQL

获取表单输入,如果请求参数非空,根据该请求参数生成查询条件,如“name=?”,“age>?”,将查询条件追加到基本框架中。利用StringBuilder来追加查询条件,这时出现一个问题,怎么判断生成的查询条件中是否需要添加“and”?
如果该查询条件是第一个查询条件,不需要添加"and",否则需要添加“and”。问题变得复杂起来,每一次生成查询条件时都需要判断前面是否存在查询条件。
我们可以考虑在SQL基本框架中添加一个查询条件,该查询条件的存在不影响查询结果,只充当占位角色,避免动态添加查询条件时判断是否需要添加“and”。根据这些要求,这一查询条件必须恒为真,这里我们取“1=1”,SQL基本框架就变成了

select column...from table where 1=1

每一个动态查询条件前段都添加“and”。

3.List集合为占位符赋值

有了DQL语句,接着需要考虑怎么为占位符赋值。可以在生成查询条件的同时,将占位符对应的参数收集起来,存入一个有序集合中,这里选择List集合,这样占位符就与List集合中的元素形成了顺序上的对应关系,第n个占位符对应第n个元素,遍历集合就可以为占位符赋值了。
为占位符赋值时,不仅仅需要将数据传递给占位符,还需要选择与字段一致的数据类型,List集合仅仅存储数据已经不能够满足要求了,还需要添加字段信息,以区分不同的字段,选择不同的数据类型。这里集合中的元素采用“column+data”的形式。

三 Demo

1.数据库

2.页面

<!DOCTYPE html><html><head><meta charset="UTF-8"><style>span {display: inline-block;width: 75px;margin-bottom: 15px;}</style><title>动态查询</title></head><body><form action="http://localhost:8080/JavaSETest/dynamicQueryServlet"><div><span>姓名:</span><input type="text" name="name"></div><div><span>性别:</span><input type="text" name="sex"></div><div><span>年龄:</span><input type="text" name="age"></div><div><span>部门编号:</span><input type="text" name="depNo"></div><div><input type="submit"value="查询"> <input type="reset"value="重置"></div></form></body></html>

3.服务器端(Servlet)

"/dynamicQueryServlet" DynamicQueryServlet serialVersionUID = 1L "text/html;charset=UTF-8"String name = request.getParameter("name"= request.getParameter("sex"= request.getParameter("age"= request.getParameter("depNo"String baseSQL = "select name,sex,age,depNo from tb_employee where 1=1"= StringBuilder();List<String> params = ArrayList<String>" and name=? ""name," + name);" and sex=? ""sex," +" and age=? ""age," +" and depNo=?""depNo," += = = = == ( i = 0; i < params.size(); i++== str.split(","); (arr[0].equals("age" a = Integer.parseInt(arr[1+ 1+ 1, arr[1== res.getString("name"= res.getString("sex" targetAge = res.getInt("age"= res.getString("depNo"= "name=" + targetName + "--" + "sex=" + targetSex + "--" + "age=" + targetAge + "--"
   + "depNo=" ++ "<br>" (ClassNotFoundException | (res != (ps != (conn != = length = (length == 0"查询为空"+ "<br>" + (str == | str.equals("" Connection getConnection() "com.mysql.jdbc.Driver" DriverManager.getConnection("jdbc:mysql://localhost:3366/test01", "root", "123"

热心网友 时间:2022-05-05 04:34

jdbc preparedstatement可以用来进行动态查询
int a=3;
int b,c=5;
floatx=3.2,y=3f,z=0.75;
charch1='K',ch2='P';
应注意,在定义中不允许连续赋值,如a=b=c=5是不合法的。
【例3.11】
main()
{
inta=3,b,c=5;
b=a+c;< BR> printf("a=%d,b=%d,c=%d\n",a,b,c);
}
3.7 各类数值型数据之间的混合运算
变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:
1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 简述使用Jdbc实现数据查询的完整步骤 如何剪视频 怎样CUT一部电视剧中的片段?如题 谢谢了 单人cut什么意思 爱剪辑要剪某个综艺的单人cut怎么剪 福州家庭装修谁比较清楚? 油画是什么时候传入中国的 土巴兔装修贷怎么样? 青岛知名的装修公司有哪些? 福州有哪个公司设置外墙干挂石材施工图。。 急需阿~ 长沙装修公司排名前十强有哪些 福州国广一叶怎么样 福州家装 福州永泰县装饰公司排名有没有?我想参考一下。 福州丽居装饰工程有限公司怎么样? 跪求推荐,福州做酒店的装修公司. 福州哪有正在装修的酒店,或者大型的公装正装修的,本人想学室内公装的施工,所以想找工地 热门福州装修设计公司介绍,推荐这4家! 想找家性价比高福州办公室装修公司?请教下大家 手机充电显示充电出错是什么原因? JDBC的工作原理是什么? JDBC中提供的两种实现数据查询的方法是什么? jdbc原理 JDBC可以动态的获取数据库里的所有的表吗 java中使用JDBC完成数据库操作的基本步骤是什么? Java里面的JDBC是什么意思啊? jdbc preparedstatement可以动态查询么 java 中使用jdbc怎样实现动态的链接多个数据库?? JDBC如何实现跨数据库的查询 jdbc的JTable中实现一个简单的查询功能 JDBC用户特定条件查询怎么实现 jdbc怎么动态的创建一个数据库? 怎样写一个通用的JDBC查询方法 苹果11怎么不能长截图? 手机充电时显示充电显示充电异常找售后咋回事 18. 在制作PPT时,如何设置动作按钮和超链接? ppt链接中的超链接和动作有什么不同? 通过设置动作按钮和插入超链接来改变幻灯片的播放顺序吗? PPT中 动作设置 和 超链接 的区别?是不是作用是一样的? 要求在做的幻灯片中添加超级链接和动作按钮 请问应该怎么做呀???_百度...