在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 就不存在这种问题了。
------解决方案--------------------