日期:2014-05-18  浏览次数:20982 次

在insert语句中包含特殊字符时出错
我用jsp+orcle做的公告栏,如果是从word中复制的内容,其中多数包含特殊字符 这些的,数据库会把这些字符当作语句中的标点,如多个单引号则会当作语句中的单引号,这样就会报错,这种该如何解决呢?

------解决方案--------------------
在执行sql插入前将特殊字符进行替换,如:
String str="";
str = str.replaceAll("'","''");
------解决方案--------------------
估计LZ是用直接写SQL语句的方式吧,用参数的方式试试看
大概思路
PrepareStatement stmt = your_conn.prepareStatement(your_sql);
stmt.setString(your_param_index, your_param_value);
stmt.executeUpdate();


------解决方案--------------------
用参数的方式试试看 

------解决方案--------------------
听强人说话 up!
------解决方案--------------------
用参数应该是可以的.
或者把符号转义一下.如"'"转义成"\'".
------解决方案--------------------
所以说不要使用 Statement,应该使用 PreparedStatement 就不存在这种问题了。
------解决方案--------------------
将一个单引号替换为两个即可
sql = sql.replaceAll("'","''");
------解决方案--------------------
用2楼的方法试试吧,每个特殊字符没法都进行转义。
------解决方案--------------------
PreparedStatement和参数就可以了
------解决方案--------------------
同意不使用 Statement,应该使用 PreparedStatement 参数传递就不存在这种问题了。
------解决方案--------------------
一个单引号弄成2个
sql = sql.replaceAll(" '"," ' '");
------解决方案--------------------
replace.
------解决方案--------------------
补充一点,尽量不要使用String.replaceAll(String arg1, String arg2)这个方法,因为arg1可以是正则表达式的字符串,
使用之后会越改越乱,比如说arg1="."就会把所有字符都替换成arg2 :(
所以说最好使用String.replace(String arg1, String arg2)这个方法,具体区别参见J2SE API DOC。
------解决方案--------------------
PrepareStatement stmt = conn.prepareStatement(your_sql);
stmt.setString(your_param_index, your_param_value);
stmt.executeUpdate(); 

用? 传递参数. 不要自己拼装sql.
------解决方案--------------------
学习,学习
------解决方案--------------------
学习学习
------解决方案--------------------
使用PrepareStatement就行了
------解决方案--------------------
PrepareStatement stmt = conn.prepareStatement("insert into test (title) values(?)");
stmt.setString(1, "fd,fds'fds'fd,");
stmt.executeUpdate();

用参数吧 类似这样的 如果你每一个特殊符号都用转义字符的话 那累死了
------解决方案--------------------
一个很值得研究的问题
呵呵
得好好看看输了
------解决方案--------------------
sql插入前将特殊字符进行替换
------解决方案--------------------
用replace只是一时快感
使用PrepareStatement才是正道
------解决方案--------------------
不要使用 Statement,应该使用 PreparedStatement 就不存在这种问题了。
------解决方案--------------------