【急】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' 之前有未闭合的引号。
展开
 我来答
非情林q
2010-04-20 · TA获得超过987个赞
知道小有建树答主
回答量:1157
采纳率:100%
帮助的人:969万
展开全部
用户输入如果没有任何限制的话,则必须对特殊字符进行变换。如果对单引号不进行变换,则会发生数据库错误,甚至可能导致系统崩溃。不过回避方法却非常简单,只要将单引号[']转换成两个单引号['']就可以了。 例: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

百度网友22da862
2010-04-20 · TA获得超过124个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:81.2万
展开全部
你可以用预编译的sql 把content set进去
sql="SELECT * FROM News WHERE TITLE LIKE '%"+?+"%' ;
ps.setString(1,content);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5f1a54f
2010-04-20 · TA获得超过476个赞
知道小有建树答主
回答量:739
采纳率:0%
帮助的人:600万
展开全部
你把content打印出来出来看看 sql本身没问题 我估计问题出现在content值上 ,可能包含单引号之类的属于sql关键字符的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式