【问题标题】:Fastest way to escape charArray before SQL insertion在 SQL 插入之前转义 charArray 的最快方法
【发布时间】:2017-06-27 15:47:26
【问题描述】:

我有一个大小不一的 char[] originalCharArray。

我想创建一个新的 char[] returnCharArray,这样每次 char ' 出现在原始 char[] 中时,都会添加另一个:

"Hello' World" ---> "Hello'' World"

最快的方法是什么? 我考虑将 returnCharArray 定义为 originalCharArray 的大小的 x2,并从原始 charArray 中一一复制字符(在需要时添加额外的 '),然后在最后删除多余的分配空间(额外的空间是否重要?)

我也考虑过StringBuilding,但是我必须先转换为String,然后再转换为CharArray。

最佳实践是什么?

【问题讨论】:

  • 您可以使用 PreparedStatements 自动执行此操作。如果您试图阻止 SQL 注入,那么要反击的不仅仅是撇号。

标签: java arrays char escaping


【解决方案1】:

您描述的通过字符串执行此操作的方法可能是最简单且最不痛苦的方法。只需创建一个新字符串,然后将单引号全部替换为两个单引号。

String str = new String(originalCharArray);
str = str.replaceAll("'", "''");
char[] newCharArray = str.toCharArray();

Demo

【讨论】:

    【解决方案2】:

    您可以使用replaceAll' 替换为''

    char[] c = new char[]{'H','e','l','l','o','\'',' ','W','o','r','l','d'};
    String s = String.valueOf(c);
    System.out.println("Before : " + s );
    
    s = s.replaceAll("'", "''");
    System.out.println("After : " + s );
    
    char[] c_modified = s.toCharArray();
    
    System.out.println( Arrays.toString(c_modified) );
    

    输出:

    Before : Hello' World 
    After : Hello'' World
    [H, e, l, l, o, ', ', , W, o, r, l, d]  
    

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 2012-02-13
      • 1970-01-01
      • 2012-01-31
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 2014-03-08
      相关资源
      最近更新 更多