【急】jsp连接数据库查询报错

[复制链接]
查看11 | 回复1 | 2010-4-20 14:59:22 | 显示全部楼层 |阅读模式
你把content打印出来出来看看 sql本身没问题我估计问题出现在content值上 ,可能包含单引号之类的属于sql关键字符的了
回复

使用道具 举报

千问 | 2010-4-20 14:59:22 | 显示全部楼层
用户输入如果没有任何限制的话,则必须对特殊字符进行变换。如果对单引号不进行变换,则会发生数据库错误,甚至可能导致系统崩溃。不过回避方法却非常简单,只要将单引号[']转换成两个单引号['']就可以了。 例: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

已赞过已踩过<
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行