在插入derbyDB varchar字段之前,搜索“特殊”字符的java字符串

我试图从MS Access转换为DerbyDB。 但是,某些varchar字段具有“特殊”字符,例如换行符,制表符,百分号,外来字符等。

我创建了一个快速方法……

public String charCheck(String s) { errLog.add(1, "converting string from " + s); s.replaceAll("'", "''");//an apostrophe is escaped with an apostrophy in Derby... s.replaceAll("%", "\\%");//a percent sign s.replaceAll("\\s+n", " ");//whitespace characters (newlines and tabs etc) s.replaceAll("/", "\\/");//the 'divide' \ character, s.replaceAll("<", "\\", "\\>");//mathematical symbol greater than errLog.add(1, "to " + s); return s; }//end method 

每当我确定需要varchar(或long varchar)数据类型时,我就会运行它。 奇怪的是我的错误日志打印出消息,但在输出中,空白字符似乎没有变化(即标签和新行,不会转换为简单的空格)并且字符串中的任何撇号都不会被替换。

此方法的输出样本生成以下内容。

 converting string from 2. FIN DE L'ESSAI to 2. FIN DE L'ESSAI 

所以字符串显然保持不变,这在我运行insert语句时扰乱了derbyDB,我也没有找到关于将多个记录插入表的转义序列的任何明显文档,我想使用一个语句然后在之后添加escape关键字它,即

 stmt.execute("{call "+ sqlInsertStatement +"}{escape '" + escapeCharacter +"'" ); 

我还从文档中读到,在上面的语句中, escape关键字可能没有用处,如果有的话,我该如何处理

我需要知道去哪里排序我得到的插入错误。

如果我将insert语句直接复制并传递给ij,那么删除记录将插入的特殊字符,我只是不明白为什么它在第一个实例中没有被转换。

我也尝试用双引号围绕varchar和longvarchar字段,但德比再次发出一个错误,说找到了双引号!

我希望得到这个排序,因为我觉得我如此接近……

提前致谢

字符串是不可变的,您对它们执行的所有操作都会产生新的字符串。 您需要为新String分配当前引用。

例:

s= s.replaceAll("'", "''");

如果它只是替换,那么replace()可能是比使用replaceAll()更好的选择

而不是通过String ,将String转换为char数组,然后使用do … while循环依次使用if tests来替换每个char。 然后将数组转回String,然后返回它