2

我正在尝试从 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 less than
    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

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

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

我还从文档中读到,escape关键字在上述语句中可能没有用,如果是这样,我该怎么做

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

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

我也尝试过用双引号包围 varchar 和 longvarchar 字段,但是 derby 再次抛出一个错误,指出找到了双引号!

我想解决这个问题,因为我觉得我很接近......

提前致谢

4

2 回答 2

2

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

例子:

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

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

于 2012-08-22T14:29:12.423 回答
1

而不是通过String,将String转换为char数组,然后使用 do...while 循环char依次使用 if 测试替换每个字符。然后将数组转回字符串然后返回

于 2012-08-22T14:32:25.907 回答