java中SQL查询语句有like '%?%'怎么写

yozora_k 2017-10-21 11:37:18
我的SQL是这样写的
String sql = "select * from article where title like '%?%' order by id desc";
然后运行就抛出空指针异常
如果我把?替换成一个字符串,则不会报错。
所以请问要用?替代符的时候应该怎么写?
...全文
3755 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yozora_k 2020-01-08
  • 打赏
  • 举报
回复
大神们,都两年多了。。。。那会儿刚刚学java
张蒙炬 2019-09-20
  • 打赏
  • 举报
回复
CONCAT函数可以解决的 一般也都是用preparedstatement来作为参数传递的防止sql注入
yyyyhui_ 2019-09-20
  • 打赏
  • 举报
回复
这种问题建议先自己找答案,网上大部分问题都可以找到的,实在找不出问题在问别人
啦啦啦灬 2019-09-18
  • 打赏
  • 举报
回复
引用 4 楼 空_灵 的回复:
你可以用CONCAT函数, PreparedStatement可以识别, 如下: String sql = "select * from article where title like CONCAT('%', ?, '%') order by id desc"; PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "关键字"); 这样就不会报错了
我也是用的concat函数写的
钱宝宝 2019-09-16
  • 打赏
  • 举报
回复
oracle : sql.append(" AND TITLE like '%' ||?||'%'"); values.add(condiction.get("title"));
钱宝宝 2019-09-16
  • 打赏
  • 举报
回复
sql.append(" AND TITLE like '%' +?+'%'"); values.add(condiction.get("title"));
豫让_______ 2019-09-16
  • 打赏
  • 举报
回复
mysql mybatis like concat('%',#{paramKey},'%')
  • 打赏
  • 举报
回复
你这个在项目用的话传个参数就好
yety123 2019-09-16
  • 打赏
  • 举报
回复
oralce 的话可以用函数判断 and instr(title,?)>0
wushuang8 2017-10-24
  • 打赏
  • 举报
回复
你dao层加参数的时候直接把参数a写成:%a%,把%a%当做?号传进去,sql直接写**** like ?; 我一般是这样写的
超哥万岁 2017-10-24
  • 打赏
  • 举报
回复
String sql = "select count(*) from category c where 1 = 1 and c.category_name like ? "; pstmts = conn.prepareStatement(sql); pstmts.setString(1,"%资讯%"); rs = pstmts.executeQuery();
xzxmustwin 2017-10-23
  • 打赏
  • 举报
回复
%?% 两个百分号之间的问号是模糊查询要选取的字段,你这样写不能查吧 还是说你要查包含?的.如果是这样的话用转义字符 \? 吧。
程序员爱酸奶 2017-10-23
  • 打赏
  • 举报
回复
我也碰到这个问题以前,我是这样解决的。假设?代表的是name这个参数吧 String sql = "select * from article where title like ? order by id desc"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, '%'+name+'%'); 写到这应该可以了吧,后来都没有这样做了,感觉很少用?了。下面是我写的一个方法,全部放出来了,你可以看一下你想要的那部分我是怎么写的。应该是比较清楚的。 public int countSelectByMsg(Connection conn, ManageDto manageDto) throws Exception { // TODO Auto-generated method stub StringBuffer sql = new StringBuffer(); sql.append("SELECT COUNT(*) AS C FROM USER U LEFT JOIN DUTY D ON U.DUTY_ID=D.DUTY_ID LEFT JOIN DEPARTMENT DP ON DP.DEPARTMENT_ID=D.DEPARTMENT_ID WHERE 1=1 "); // 连接查询条件 // 姓名 if (manageDto.getUserName() != null&& !manageDto.getUserName().equals("")) { sql.append(" AND USER_NAME LIKE '%" + manageDto.getUserName()+ "%'"); } // 电话 if (manageDto.getTelephone() != null&& !manageDto.getTelephone().equals("")) { sql.append(" AND TELEPHONE LIKE '%" + manageDto.getTelephone()+ "%'"); } // 邮箱 if (manageDto.getEmail() != null && !manageDto.getEmail().equals("")) { sql.append(" AND EMAIL LIKE '%" + manageDto.getEmail() + "%'"); } // 身份证 if (manageDto.getIdentificationCard() != null&& !manageDto.getIdentificationCard().equals("")) { sql.append(" AND IDENTIFICATION_CARD LIKE '%" + manageDto.getIdentificationCard() + "%'"); } // 性别 if (manageDto.getUserSex() != null&& !manageDto.getUserSex().equals("")) { sql.append(" AND USER_SEX LIKE '%" + manageDto.getUserSex() + "%'"); } // 部门 if (manageDto.getDepartmentId() != 0) { sql.append(" AND DP.DEPARTMENT_ID =" + manageDto.getDepartmentId()); } // 职位 if (manageDto.getDutyId() != 0) { sql.append(" AND D.DUTY_ID =" + manageDto.getDutyId()); } PreparedStatement ps = conn.prepareStatement(sql.toString()); ResultSet rs = ps.executeQuery(); rs.next(); return rs.getInt(1); }
空_灵 2017-10-23
  • 打赏
  • 举报
回复
你可以用CONCAT函数, PreparedStatement可以识别, 如下: String sql = "select * from article where title like CONCAT('%', ?, '%') order by id desc"; PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "关键字"); 这样就不会报错了
一个帅逼 2017-10-23
  • 打赏
  • 举报
回复
以前练习jdbc的时候也发现这个问题 ,找不到好的解决办法,最后就只能这样了ResultSet rs=j.get("select * from t_user where user_name like ?","%"+str+"%");
牛肉滚蛋花 2017-10-22
  • 打赏
  • 举报
回复
你用 ' ? ' 这个查询语句还怎么查询 你都不给它指明查询的对象 老哥
代码搬运工qq 2017-10-22
  • 打赏
  • 举报
回复
你是在oracle里面这么运行吗? ?只能是代码中的替代符而已

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧