条件拼接语句连起来了,少空格
where 1=1 和 and xxx,中间要有空格
where 1=1和and xxx中间少空格了吧
把sql语句里的and改成where,我的是这样就行了
就是在输入值进行查询之后,会跳转到这个
JSP页面呢?是不是没设置UTF-8
if (description != null && !"".equals(description.trim())) { sql.append(" and DESCRIPTION like '%' ? '%' "); paramList.add(description); }
这样也没有问题
if(description!=null&&!"".equals(description)){
sql.append(" and DESCRIPTION like concat('%',?,'%')");
args.add(description);
}
1、这个是sql拼接, 如果if语句中条件满足了,就会和之前的sql拼接,举个例子:select * from user where id=1,如果条件满足不加空格的话就会变成“select * from user where id=1and command=?”,很明显and和1连在一起了,是错误的
2、?是指带你要输入的数据,这个是数据库PreparedStatement预处理的操作,%?%举个例子:比如模糊查询想查userName, 那这个?代表你前台传过来的userName, 数据库里有123,1124,3323,你输入2,这三个值都能查出来,代表前面有任意字符,后面任意字符。
之前遇到的问题,提出来,没解决。今天重新敲了一遍代码,还是遇到同样的问题
解决办法:jdbc的数据库连接地址后面加?useUnicode=true&characterEncoding=UTF-8
终于解决了
在servlet中有req.setAttribute("command", command)吗,没有的话拿不到command的值。
因为老师用的是缺省值的方式,使用List在后面遍历填充字段信息的时候比较方便。老师也说了,那只是一种实现方式。
你可以直接判断参数是否有值来动态修改sql,就不需要新建paramList和遍历了,只是需要拼接sql字符串。
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message?useUnicode=true&characterEncoding=UTF-8","root","123456");
这行这样写就可以了
这个问题可海了去了。
首先1.进入控制台看看有没有报异常
2.在代码中多加入几行system.out.println("haha");看看执行到哪里出错了
3.查询条件你写了吗
sql.append(" and DESCRIPTION like '%'?'%'");中'%'与?之间要有空格才行.
StringBuilder prepareSql = new StringBuilder("SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1"); //不要使用SELECT *,数据库引擎还要去解析列名,效率会低 if(command != null && !"".equals(command.trim())){//如果传入的参数存在并且不为空字符串 prepareSql.append(" AND COMMAND='"+command+"'"); } if(description != null && !"".equals(description.trim())){ prepareSql.append(" AND DESCRIPTION LIKE '%"+description+"%'"); }
可以使用,我就是这样用的,是没问题的。
目前还没看出来这两种方式孰优孰劣,只不过只要涉及到SQL语句的拼接都得小心谨慎。
and前面不一定要空格,你可以在where 1=1 后面加上空格。也是可以的。
应该是Message.xml的select标签中间select语句最后没加where 1=1
正确的sql语句是select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE where 1=1 and COMMAND=? 。
没加where 1=1的话拼出来的sql语句是select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE and COMMAND=?
所以会有SQL语法错误
请求过程中乱码了,在Servlet的方法里加上
resp.setContentType("text/html;charset=utf-8");
你都知道command和description是字符串,那么sql语句查询条件为字符串的字段时是不是需要用单引号或双引号来标识该字段为字符串
贴代码 才能看到
我也遇到了,
试试jdbc的数据库连接地址后面加了?useUnicode=true&characterEncoding=UTF-8
这是前面提问的答案,确实解决了问题
like '%' ? '%'
这一句两个'%'与?之间都有空格,你可能忘了打空格
下载源码,看web.xml文件
打完断点后 你用restart in debug模式启动服务器,再运行就会看完description变量的值
同样的问题
jar包没引。
仔细检查一下是否存在非法字符,英文抒写不规范也会导致这个报错。
应该是调用越界问题吧:
"参数索引越界"(参数不能少于1个)
一般是 sql语句少了问号
是sql语句有问题
还可能是 :Parameter index out of range (2 > number of parameters, which is 1). 错误是预插入语句少了两个问号导致的,原因可能是sql语句'号使用不当导致的 String sql = "select * from t_mobile_picture where PIC_STATUS = '1" + "' and IMEI_ID != ?" + " and (POW(ADJUST_JINGDU-?,2)+POW(ADJUST_WEIDU-?,2)<1)" +" order by CREATE_TIME desc limit ?,?"; 如果不小心写成 String sql = "select * from t_mobile_picture where PIC_STATUS = '1" + "' and IMEI_ID != ?" + &qu ...
你看你的web.xml配置文件,里面配置了这个List.action需要执行的Servlet类。如果按照老师写的,那就是执行ListServlet类里面的方法
点击设置切换到HTML5播放器