我正在尝试从 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 再次抛出一个错误,指出找到了双引号!
我想解决这个问题,因为我觉得我很接近......
提前致谢