Jdbc模糊查询有or语句

本文分享了在使用Java JDBC技术进行数据库查询时遇到的乱码问题解决方案。作者通过调整URL编码设置,解决了POST请求中搜索字段的乱码问题,并成功实现了数据库查询功能。

今天复习了一下大学时期学习的底层Java操作数据库的jdbc技术 , 结合Servlet随便写了一个所有同行都会的简单crud , 结果在写一个输入框查询所有字段(select * from table where id = ‘"+search+"’ or name like ‘%"+search+"%’ or gender like ‘%"+search+"%’ or skill like ‘%"+search+"%’ )的简单问题上翻了船 /(╯﹏╰)\

翻船归翻船 , 最恶心的是 , 居然连个错误也不告诉我…
后来怎么想也没想明白 , 于是翻看了一些前辈们的博客 , 最后翻的到两篇尤其受益(
@平凡的华仔的https://blog.youkuaiyun.com/wangcunhuazi/article/details/47067389
和@渣渣_程序猿的https://blog.youkuaiyun.com/lalalaas123/article/details/53906616
非常感谢二位!!!)
发现竟然是我的url写的有问题 , 没有设置编码 , 导致最后SQL语句里没有值 , 只拼了一堆?(select * from table where id = ‘?’ or name like ‘%?%’ or gender like ‘%?%’ or skill like ‘%?%’ )

最后改队之后的代码如下

//片段
protected void doGet(HttpServletRequest req , HttpServletResponse res) throws IOException , ServletException{
	//取前端name属性为searchField的文本框的值
	String search = req.getParameter("searchField");
	//Post乱码转换
	search = new String(search.getBytes("ISO-8859-1") , "UTF-8");
	try{
		//创建驱动
		Class.forName("com.mysql.jdbc.Driver");
		//连接数据库设置编码UTF-8
		Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306?useUnicode=true?			       characterEncoding=UTF-8" , "root" , "1234");
		//创建PreparedStatement(亲测有效 , 不必质疑)
		PreparedStatement ps = connection.prepareStatement("select * from table where id = '"+search+"' or name like '%"+search+"%' or gender like '%"+search+"%' or skill like '%"+search+"%' ");
		//打印Sql(这个很好 , 便于调试 , 如果你的sql放到数据库可以执行 , 但java里不行可以用这个!!!)
		ps.execute();
		System.out.println(ps.toString());
		//执行Sql
		ResultSet resultSet = ps.executeQuery();
		//设置响应格式和编码
		res.setContentType("text/html;charset=UTF-8");
		//获取打印流
		PrintWriter pw = res.getWriter();
		//创建StringBuffer拼字符串
		StringBuffer s = new StringBuffer();
		s.append("<!DOCTYPE HTML>"
		+"<html>"
		+"<head></head>"
		+"<body>"
		+"<table>"
		+"<tr>"
		+"<td>编号</td>"
		+"<td>姓名</td>"
		+"<td>性别</td>"
		+"<td>技能</td>"
		+"</tr>");
		//遍历结果集
		while(resultSet.next()){
			int id = resultSet.getInt("id");
			String id = resultSet.getString("name");
			String id = resultSet.getString("gender");
			String id = resultSet.getString("skill");
			s.append("<tr>"
			+"<td>"+id+"</td>"
			+"<td>"+name+"</td>"
			+"<td>"+gender+"</td>"
			+"<td>"+skill+"</td>"
			+"</tr>");
		}
		s.append("</table></body></html>");
		//写前端
		pw.println(s.toString();
		//关闭流资源
		pw.close();
		ps.close();
	}catch(Exception e){
		e.printStackTrace();
	} 
}

小码农

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值