在insert语句中包含特殊字符时出错 我用jsp+orcle做的公告栏,如果是从word中复制的内容,其中多数包含特殊字符 这些的,数据库会把这些字符当作语句中的标点,如多个单引号则会当作语句中的单引号,这样就会报错,这种该如何解决呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在执行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(); 所以说不要使用 Statement,应该使用 PreparedStatement 就不存在这种问题了。 我的语句内容就像咱们现在回复框一样,有插入超级链接,表格,设置左对齐这些,都是html语言,就是这些造成的,用什么方法能保证下次查出来内容还能显示表格这些,而且能正常运行,用什么方法好呢? public static String HtmlEncode(String input) throws Exception{ String result=input; result=result.replace(" "," "); result=result.replace("<","<"); result=result.replace(">",">"); result=result.replace("\n","<br>"); result=result.replace("\","""); return result;} 将一个单引号替换为两个即可sql = sql.replaceAll("'","''"); PreparedStatement和参数就可以了 同意不使用 Statement,应该使用 PreparedStatement 参数传递就不存在这种问题了。 一个单引号弄成2个sql = sql.replaceAll(" '"," ' '"); 补充一点,尽量不要使用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 stmt = conn.prepareStatement("insert into test (title) values(?)");stmt.setString(1, "fd,fds'fds'fd,");stmt.executeUpdate(); 用参数吧 类似这样的 如果你每一个特殊符号都用转义字符的话 那累死了 sql插入前将特殊字符进行替换 使用PrepareStatement 用replace只是一时快感使用PrepareStatement才是正道 不要使用 Statement,应该使用 PreparedStatement 就不存在这种问题了。 欢迎加入本人的QQ群,群号5586686,身份认证输入如:JAVA、JSP、STRUTS等都可以,非软件开发人员勿加,谢谢合作! myeclipse如何将工程部署到远程的tomcate中(在线等) Resultset对象关闭的问题 如何保存数组中的值 求网购开源代码 关于〇乱码解决 二〇一〇年七月八日变成二?一?年七月八日 自定义标签 开发思路问题: 为什么我调试的时间总是比编程的时间要多得多? 讨论!弹出窗口怎样从父窗口获得多个同名文本框的值? response.sendRedirect问题,帮帮忙,我都快被他搞疯了! 请教一个日历在IE与Firefox中的兼容性问题 请教高手>>>在struts应用中如何将输入页面中的数据提交到另一个页面显示,急,急,急 access中的记录不能及时显现
String str="";
str = str.replaceAll("'","''");
大概思路
PrepareStatement stmt = your_conn.prepareStatement(your_sql);
stmt.setString(your_param_index, your_param_value);
stmt.executeUpdate();
{
String result=input;
result=result.replace(" "," ");
result=result.replace("<","<");
result=result.replace(">",">");
result=result.replace("\n","<br>");
result=result.replace("\",""");
return result;
}
sql = sql.replaceAll("'","''");
sql = sql.replaceAll(" '"," ' '");
使用之后会越改越乱,比如说arg1="."就会把所有字符都替换成arg2 :(
所以说最好使用String.replace(String arg1, String arg2)这个方法,具体区别参见J2SE API DOC。
stmt.setString(your_param_index, your_param_value);
stmt.executeUpdate(); 用? 传递参数. 不要自己拼装sql.
stmt.setString(1, "fd,fds'fds'fd,");
stmt.executeUpdate(); 用参数吧 类似这样的 如果你每一个特殊符号都用转义字符的话 那累死了
使用PrepareStatement才是正道