模糊查询和sql语句的拼接

article/2025/10/9 2:29:16

如下面图片所示:进行模糊查询

前端的页面代码:  注意:请选择那里的value="" 一定要写

<body><form action="SearchStuServlet" method="post"><table border="1px" width="700" align="center" ><tr > <td colspan="8">按姓名查询:<input type="text" name = "sname">&nbsp;	&nbsp;	&nbsp;	按性别查询:<select name ="sex"><option  value ="">--请选择--</option><option value ="男">男</option><option value ="女">女</option></select>&nbsp;	&nbsp;	&nbsp;	<input type="submit" value="查询">&nbsp;	&nbsp;	&nbsp;	<a href="add.jsp">添加</a></td></tr>…………</table></form>
</body>

 SearchStuServlet的代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {//编码格式request.setCharacterEncoding("utf-8");//获取页面填写的信息String sname = request.getParameter("sname");String sex = request.getParameter("sex");System.out.println(sex+""+sname);//获取数据库中的数据StuService service = new StuServiceImpl();List<Student> stu = service.searchStu(sname, sex);//将获取的数据存储到session中HttpSession session = request.getSession();session.setAttribute("list", stu);//跳转页面request.getRequestDispatcher("list.jsp").forward(request, response);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

这里要分析一下:
如果只有姓名 ,select * from stu where sname like ? ; 

如果只有性别 , select * from stu where gender = ? 
如果两个都有 select * from stu where sname like ? and gender=?

如果两个都没有就查询所有。

Dao层代码:注意在这里只能用list集合来接收这个参数,因为参数的个数不是固定的

@Overridepublic List<Student> searchStudent(String sname, String sgender) throws SQLException {System.out.println("现在要执行模糊查询了,收到的name ="+sname + "==genser=="+sgender);		QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());		//String sql = "select * from stu where sname=? or sgender=?";		/** 这里要分析一下:* 	如果只有姓名 ,select * from stu where sname like ? ;* 	如果只有性别 , select * from stu where gender = ?* 如果两个都有 select * from stu where sname like ? and gender=?* 如果两个都没有就查询所有。*/String sql = "select * from stu where 1=1 ";List<String> list = new ArrayList<String> ();				//判断有没有姓名, 如果有,就组拼到sql语句里面if(sname!=null && sname.length()!=0){sql = sql +" and sname like ?";list.add("%"+sname+"%");}//判断有没有性别,有的话,就组拼到sql语句里面。if(sex!=null && sex.length()!=0){sql = sql +" and sex = ?";list.add(sex);}return queryRunner.query(sql, new BeanListHandler<Student>(Student.class),list.toArray());}

 说明:这里的runner.query()的第三个参数是可变参数,可以接收0个参数,即查询全部,可以接收一个参数,即查询性别或者姓名,可以接收两个参数,即性别和姓名连起来一起进行模糊查询   可变参数用数组接收,所以list转为数组

 

如果Dao层不用runner.query() 的可变的参数。直接用if  else也是可以写出来模糊查询的  ,思路都是一样的

代码如下:只不过比较麻烦

	/*** 模糊查询*/public List<Student> searchStu(String sname, String sex) throws SQLException {System.out.println("sanme="+sname+"sex="+sex);ComboPooledDataSource dataSource = new ComboPooledDataSource();QueryRunner queryRunner = new QueryRunner(dataSource);String sql = "select * from ddd where 1=1";//如果两个都有 select * from stu where sname like ? and gender=?if((sname!=null && sname.length()!=0)&&(sex!=null && sex.length()!=0)){sql = sql +" and sname like ? and sex=?";sname = "%"+sname+"%";return queryRunner.query(sql, new BeanListHandler<Student>(Student.class),sname,sex);}else if((sname!=null && sname.length()!=0)||(sex!=null && sex.length()!=0)){//如果只有姓名 ,select * from stu where sname like ? ;if(sname!=null && sname.length()!=0){sql = sql +" and sname like ? ";sname = "%"+sname+"%";return queryRunner.query(sql, new BeanListHandler<Student>(Student.class),sname);}// 	如果只有性别 , select * from stu where gender = ?if(sex!=null && sex.length()!=0){sql = sql +" and sex=?";return queryRunner.query(sql, new BeanListHandler<Student>(Student.class),sex);}}else{//如果两个都没有就查询所有。return queryRunner.query(sql, new BeanListHandler<Student>(Student.class));}	return null;}

 


http://chatgpt.dhexx.cn/article/cg1SvWMA.shtml

相关文章

sql查询之模糊查询

like 这里可以参照一下菜鸟教程、mysql like一般用于字符串查询%代表半匹配查询 SELECT * FROM student WHERE name "孙悟空";SELECT * FROM student WHERE name LIKE "孙悟空";SELECT * FROM student WHERE name LIKE "孙%";以上第一个sql语…

Mybatis模糊查询SQL语句

模糊查询 <sql id"where_case"><if test"username!null and username ! ">and username like concat(%,#{username},%)</if><if test"userrole!null">and userrole#{userrole} </if></sql> #{ }预编译S…

java中模糊查询sql怎么写,mybatis模糊查询sql,

mybatis模糊查询sql, 今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询。 后来经过搜索,发现要加上一个concat字段,要先将字符串拼接后,才能…

java中sql模糊查询_模糊查询的sql语句(java模糊查询sql语句)

模糊查询的sql语句(java模糊查询sql语句) 2020-07-24 11:06:02 共10个回答 假设表名为product,商品名为name,简界为remark.则可如下写:select[name],[remark]fromproductnamelike%aa%orremarklike%aa%.注:上面单引号的aa你表模糊查询输入的字符. 一般模糊查询语句如下:SELECT字…

连接Oracle出现协议适配器错误

在连接Oracle的时候出现如下图所示的协议适配器错误时 说明此时电脑上的Oracle服务没有开 解决步骤: 1.WindowsR 输入services.msc 点击确定 2.找到字母O开头的服务 将OracleServiceXE服务和OracleXETNSListener服务打开 注意: 如果电脑性能比较好,推荐将这两个服务的启动类…

【已解决】SQL PLUS出现协议适配器错误

今天在做c#课程设计的时候&#xff0c;在登录页面实现数据库插入时候出现insert into语句错误&#xff08;使用access数据库&#xff09;。 在和其他专业小伙伴讨论他们使用access也出现了错误&#xff0c;但换了sql server之后成功实现&#xff0c;于是也想换成sql server&am…

ORACLE登录时,协议适配器错误的可能原因

我们进入sqlplus登录界面用管理员账号登录时会显示协议适配器错误 这种情况我们首先看一下&#xff0c;我们监听服务是否是打开的。 如果没有启动&#xff0c;把他启动就好了。 如果是打开的&#xff0c;就可能是你的注册表的oracle_sid没设置好 首先&#xff0c;我们先查看我…

oracle cmd窗口输入sqlplus / as sysdba 报协议适配器错误

一、报错信息 二、解决方法 1、启动Oracle相关服务 先查看Oracle相关服务的启动。 2、配置网络命名服务 查看oracle安装目录里面监听的文件tnsnames.ora和listener.ora文件 我的目录&#xff1a;c:\app\product\11.2.0\dbhome_1\NETWORK\ADMIN 1&#xff09;检查TNS_ADMI…

ERROR: ORA-12560: TNS: 协议适配器错误

Oracle数据库客户端能启动执行操作&#xff0c;但是cmd界面下提示ERROR: ORA-12560: TNS: 协议适配器错误&#xff0c;CrtlR输入services.msc命令检查Oracle两个服务是否开启&#xff0c;如果开启了还是此错误&#xff0c;那就去CrtlR输入regedit命令找到如下图指示&#xff0c…

TNS-12560: TNS: 协议适配器错误 TNS-00530: 协议适配器错误

重启监听时报错 ORA-12560: TNS: 协议适配器错误的解决方法 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个&#xff1a; 1.监听服务没有起起来。windows平台个一如下操作&#xff1a;开始—程序—管理工具—服务&#xff0c;打开服务面板&#xff0c;启动oraclehome92…

ORA-12560 TNS: 协议适配器错误 根源:ORA-19815

登陆PL/SQL&#xff0c;确登陆失败&#xff0c;出现一个错误“ORA-01034”和“ORA-27101”如图&#xff1a; 然后分别查看路径文件: 文件1:"D:\app\Administrator\product\11.2.0\dbhome_1\database\oradim.log"找到最近第一次报错 继而查询文件2--> 文件2:&quo…

ORA-12560: TNS: 协议适配器错误怎么回事?

最近登录oracle数据库&#xff0c;发现出现了协议适配器错误&#xff0c;百度半天都没有解决&#xff0c;最后发现了问题。 由于本学渣有多个数据库&#xff0c;所以需要设置数据库(set oracle_sid数据库名)&#xff0c;但问题就出现在这里啦。。。 可以看到设置数据库时后面由…

ORA-12560 TNS: 协议适配器错误

数据库中存在多个实例时&#xff0c;使用sqlplus登录&#xff0c;报ORA-12560 TNS: 协议适配器错误解决方法&#xff1a; 1、检查监听和相应的实例是否未启动&#xff1b; &#xff08;参考&#xff1a;https://blog.csdn.net/nanyida0416sushe/article/details/5584117&#…

oracle11适配器错误,oracle11g登录出现协议适配器错误的解决办法(亲测)

第一次使用Oracle数据库(其实之前下了Oracle18c&#xff0c;但发现需要8G物理内存&#xff0c;Oracle12也需要6G内存&#xff0c;而我的电脑只有4G内存&#xff0c;无奈只能选择Oracle11g)&#xff0c;整了好一会才知道oracle的登录方法&#xff1a;“开始”——Oracle软件目录…

SQL> conn sys/root as sysdbaERROR:ORA-12560: TNS: 协议适配器错误的解决方案

文章目录 问题描述 解决方案 总结 问题描述 启动oracle数据库时&#xff0c;出现协议适配器错误的情况&#xff1a; SQL> conn sys/root as sysdba ERROR: ORA-12560: TNS: 协议适配器错误 解决方案 database instance没有起起来。windows平台如下操作&#xff1a;开始--…

cmd登录mysql提示协议适配器错误_ORA-12560: TNS: 协议适配器错误

造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个&#xff1a; 1 监听服务没有起起来 Windows平台个一如下操作&#xff1a;开始---程序---管理工 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个&#xff1a; 1 监听服务没有起起来 Windows平台个一如下操作&…

Oracle 协议适配器错误的解决方法

我是在cmd sqlplus时提示的协议适配器错误&#xff0c;但用plsql登录是可以连接上的。 查阅了很多博主的文章&#xff0c;按我自己解决问题的思路整理了一下&#xff1a; 1.首先看本地服务有没有打开&#xff1a; Oracle ORCL VSS Writer Service&#xff1a;Oracle卷映射拷贝…

oracle数据库适配器错误,Oracle协议适配器错误解决方法

今天打开sqlplus发现适配器错误,登录不进去sqlplus 解决办法: 1.检查OracleServiceORCL和OracleOraDb11g_home1TNSListener是否处于打开状态 2.打开cmd命令窗口输入: 这时会发现 E: \ORACLE\DATABASE\BTS_YSH.DBF是这个文件被错误的删除 3.我们只需要将其正确删除即可 alter …

SQL plus协议适配器错误

SQL plus协议适配器错误 出现这种情况的原因是因为在打开Oracle时有部分需手动打开的服务未启动 解决方法如下&#xff1a; 1.打开此电脑点击管理 2.点击服务和应用程序 3.点击服务 4.找到需手动启动的Oracle服务右键点击启动 将服务启动之后就可以成功的进入到数据库了

登录Oracle数据库报错,ERROR:ORA-12560: TNS:协议适配器错误,怎么解决?

一、点击计算机、右键点击管理、点击服务、启动OracleServiveORCL服务和OracleOraDb11g_home1TNSListener服务。 二、重新cmd打开终端、输入sqlplus / as sysdba 、正常登录Oracle数据库