【问题标题】:Search java string for 'special' characters before inserting into derbyDB varchar field在插入 derbyDB varchar 字段之前搜索 java 字符串中的“特殊”字符
【发布时间】:2012-08-22 14:28:00
【问题描述】:

我正在尝试从 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 再次抛出一个错误,指出找到了双引号!

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

提前致谢

【问题讨论】:

    标签: java regex insert escaping derby


    【解决方案1】:

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

    例子:

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

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

    【讨论】:

    • 好吧,所以我忘记了字符串是不可变的……现在尝试找出 derby 不喜欢它们的原因,并进行相应的调整。我再问一个问题
    【解决方案2】:

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

    【讨论】:

    • 我曾想过这样做,如果 thinksteep 的评论没有解决问题,这将是我的下一步。我给你一个 +1,因为这是个好主意。
    • 你的问题问得很好——我才 2 岁就报恩了 :)
    • 小心,这是一个很好的问题,如果你问我的话,有点“荷马辛普森”。
    • 荷马辛普森?对我来说,它似乎写得很好,对其他人有用
    • Homer Simpson - 问一个问题,当答案似乎很明显时,我发现自己在踢自己,因为我不应该问这个问题。对其他人有用...好吧,很公平。写得好...高度赞扬谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2014-05-09
    • 2014-05-04
    • 2012-03-14
    相关资源
    最近更新 更多