慕的地2560358
条件拼接语句连起来了,少空格
where 1=1 和 and xxx,中间要有空格
左千之
where 1=1和and xxx中间少空格了吧
慕斯0375060
把sql语句里的and改成where,我的是这样就行了
hei嘿嘿
就是在输入值进行查询之后,会跳转到这个
liuyansongsky
JSP页面呢?是不是没设置UTF-8
qq_地心_0
if (description != null && !"".equals(description.trim())) {
sql.append(" and DESCRIPTION like '%' ? '%' ");
paramList.add(description);
}这样也没有问题
慕粉3627062
if(description!=null&&!"".equals(description)){
sql.append(" and DESCRIPTION like concat('%',?,'%')");
args.add(description);
}
慕莱坞6592045
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,这三个值都能查出来,代表前面有任意字符,后面任意字符。
慕圣6698645
之前遇到的问题,提出来,没解决。今天重新敲了一遍代码,还是遇到同样的问题
解决办法:jdbc的数据库连接地址后面加?useUnicode=true&characterEncoding=UTF-8
终于解决了
zjxjwxk
在servlet中有req.setAttribute("command", command)吗,没有的话拿不到command的值。
涵涵sunshine
因为老师用的是缺省值的方式,使用List在后面遍历填充字段信息的时候比较方便。老师也说了,那只是一种实现方式。
你可以直接判断参数是否有值来动态修改sql,就不需要新建paramList和遍历了,只是需要拼接sql字符串。
qq_貓七菇涼_0
请问资料下载处的资料下载不了,怎么才可以获取呢?
汪杂
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message?useUnicode=true&characterEncoding=UTF-8","root","123456");
这行这样写就可以了
qq_0000
这个问题可海了去了。
首先1.进入控制台看看有没有报异常
2.在代码中多加入几行system.out.println("haha");看看执行到哪里出错了
3.查询条件你写了吗
慕粉3796571
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语句的拼接都得小心谨慎。
qq_洋葱_16
and前面不一定要空格,你可以在where 1=1 后面加上空格。也是可以的。
顺其自然_03450032
应该是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语法错误
慕用7033727
请求过程中乱码了,在Servlet的方法里加上
resp.setContentType("text/html;charset=utf-8");
莨菽菽
你都知道command和description是字符串,那么sql语句查询条件为字符串的字段时是不是需要用单引号或双引号来标识该字段为字符串
Darling604
贴代码 才能看到
安安之夜
我也遇到了,
试试jdbc的数据库连接地址后面加了?useUnicode=true&characterEncoding=UTF-8
这是前面提问的答案,确实解决了问题
绝世幻想家
like '%' ? '%'
这一句两个'%'与?之间都有空格,你可能忘了打空格
绝世幻想家
下载源码,看web.xml文件
昵称是JaVa
打完断点后 你用restart in debug模式启动服务器,再运行就会看完description变量的值
夜未央00
同样的问题
昵称是JaVa
basePath 末尾已经有一个 / 了
博玉
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 ...