今天复习了一下大学时期学习的底层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();
}
}

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

被折叠的 条评论
为什么被折叠?



