【急】jsp连接数据库查询报错
在jsp网页中完成一个搜索条的功能,代码如下11:<%12:Stringcontent=newString(request.getParameter("content")...
在jsp网页中完成一个搜索条的功能,代码如下
11: <%
12: String content = new String(request.getParameter("content").getBytes("ISO-8859-1"),"GBK");
13: sql1 = "SELECT * FROM News WHERE TITLE LIKE '%"+content+"%' ORDER BY ADDDATE";
14: rs1 = smt1.executeQuery(sql1);
15: %>
输入一般字符串查询的时候没有问题,一切正常,但是输入单引号就会报错,告知有未闭合的引号,请求高手这个要怎样解决
错误信息如下:
异 常
org.apache.jasper.JasperException: Exception in JSP: /SearchNews1.jsp:14
起 因
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]字符串 ' ORDER BY ADDDATE' 之前有未闭合的引号。
起 因
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]字符串 ' ORDER BY ADDDATE' 之前有未闭合的引号。 展开
11: <%
12: String content = new String(request.getParameter("content").getBytes("ISO-8859-1"),"GBK");
13: sql1 = "SELECT * FROM News WHERE TITLE LIKE '%"+content+"%' ORDER BY ADDDATE";
14: rs1 = smt1.executeQuery(sql1);
15: %>
输入一般字符串查询的时候没有问题,一切正常,但是输入单引号就会报错,告知有未闭合的引号,请求高手这个要怎样解决
错误信息如下:
异 常
org.apache.jasper.JasperException: Exception in JSP: /SearchNews1.jsp:14
起 因
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]字符串 ' ORDER BY ADDDATE' 之前有未闭合的引号。
起 因
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]字符串 ' ORDER BY ADDDATE' 之前有未闭合的引号。 展开
3个回答
展开全部
用户输入如果没有任何限制的话,则必须对特殊字符进行变换。如果对单引号不进行变换,则会发生数据库错误,甚至可能导致系统崩溃。不过回避方法却非常简单,只要将单引号[']转换成两个单引号['']就可以了。 例:SELECT * FROM TBL WHERE COL = 'ABC''DEF'; 模糊查询的语句虽然不会发生SQL错误,但是不进行回避的话,则无法得到要检索的值。回避方法较单引号复杂。需要使用转义符。将[%]转为[\%]、[_]转为[\_], 然后再加上[ESCAPE '\']就可以了。 例:SELECT * FROM TBL WHERE COL LIKE 'ABC\%\_%' ESCAPE '\'; ※最后一个%是通配符。 如果做日文项目的话,会出现全角字符的[%]、[_], 而这两个全角字符同样会作为半角通配符处理。所以在变换时,同时需要将全角的[%]、[_]进行变换。 例:SELECT * FROM TBL WHERE COL LIKE 'ABC\%\_\%\_%' ESCAPE '\'; 变换成这样似乎结束了,可是不要忘了还有转义符自身,万一用户输入转义符的话, 以上的处理就会发生SQL错误。所以也必须对转义符进行变换。变换方法就是将[\]转换为[\\]。 例:SELECT * FROM TBL WHERE COL LIKE 'ABC\%\_\%\\\_%' ESCAPE '\'; 以上的操作都针对于一般的数据类型,如CHAR、VARCHAR2。 如果出现NCHAR、NVARCHAR2的话,以上的处理就会出现ORA-01425错误。 如果改成以下写法,则会发生ORA-01424错误。 SELECT * FROM TBL WHERE COL LIKE '%\_%' ESCAPE TO_NCHAR('\') 正确的写法应该是 SELECT * FROM TBL WHERE COL LIKEC '%\_%' ESCAPE TO_NCHAR('\') 最后要说明的是每个like都应该写ESCAPE语句。 例: SELECT * FROM TBL WHERE COL1 LIKE '%\_%' ESCAPE '\' OR COL2 LIKE '%\_%' ESCAPE '\' CREATE TABLE #TEMP (Charcater varchar(50)) insert into #TEMP values ('werwerweerwe[werwe]werwerwer') insert into #TEMP values ('werwerweerwe[zzzzzzzzzz') insert into #TEMP values ('werwerweerwe]zzzzzzzzzz') select * from #TEMP where Charcater like '%]%' select * from #TEMP where Charcater like '%[[]%' 如果查询‘[’的则like后应些成[[],而’]‘,则直接写成] 文章源自:烈火网,原文:http://www.liehuo.net/a/200909/279254.html
参考资料: http://blog.csdn.net/llxchen/archive/2009/11/27/4889135.aspx
展开全部
你可以用预编译的sql 把content set进去
sql="SELECT * FROM News WHERE TITLE LIKE '%"+?+"%' ;
ps.setString(1,content);
sql="SELECT * FROM News WHERE TITLE LIKE '%"+?+"%' ;
ps.setString(1,content);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把content打印出来出来看看 sql本身没问题 我估计问题出现在content值上 ,可能包含单引号之类的属于sql关键字符的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询