在Java中转义MySQL字符串...没有预处理语句

时间:2017-07-24 09:04:55

标签: java mysql jdbc

我正在寻找一种使用Java来转义MySQL查询字符串的方法。

但是WAIT,在你们中的一些人直接跳到“预备陈述”的结论之前,我想再解释一下。

问题是,我没有MySQL连接。我没有直接从Java执行任何MySQL查询。我对准备好的声明不太了解,但AFAIK,准备好的声明需要实时连接才能工作。

我想让我的代码读入一堆CSV / XLS文件,获取数据,然后为MySQL生成一个巨大的INSERT查询。但是此查询现在将存储在文本文件中。它将不会执行,直到有人发出绿灯并将此文本文件转储到数据库中。

如果没有使用过度杀伤框架/库,是否有一种简单的方法可以做到这一点?谢谢你们。

5 个答案:

答案 0 :(得分:1)

您可以将指定的Special Character Escape Sequences用于MySQL

output$x <-renderDataTable(data ())

答案 1 :(得分:1)

似乎没有任何现有的lib /框架可以做到这一点。所以我想一个简单的String操纵器会做什么?

class xxx {

    private String escapeStringForMySQL(String s) {
        return s.replaceAll("\\", "\\\\")
                .replaceAll("\b","\\b")
                .replaceAll("\n","\\n")
                .replaceAll("\r", "\\r")
                .replaceAll("\t", "\\t")
                .replaceAll("\\x1A", "\\Z")
                .replaceAll("\\x00", "\\0")
                .replaceAll("'", "\\'")
                .replaceAll("\"", "\\\"");
    }

    private String escapeWildcardsForMySQL(String s) {
        return escapeStringForMySQL(s)
                .replaceAll("%", "\\%")
                .replaceAll("_","\\_");
    }

}

答案 2 :(得分:0)

试试StringEscapeUtils.escapeSql() 这将满足您的期望。

答案 3 :(得分:0)

您可能正在使用为此目的而设计的OWASP's ESAPI。它具有MySQL编解码器。

答案 4 :(得分:0)

我使用了org.apache.commons.lang3.StringEscapeUtils.escapeHtml4(input);

您可以在此处查看文档 String Escape Util (Commons Lang 3.1 API)

  

公共静态最终字符串scapeHtml4(字符串输入)转义   使用HTML实体的字符串中的字符。

     

例如:

     

“面包”和“黄油”

     

成为:&quot;bread&quot; &amp; &quot;butter&quot;.

     

支持所有已知的HTML 4.0实体,包括时髦的重音符号。注意   常用的撇号转义字符(')不是   法人实体,因此不受支持。)

     

参数:input-要转义的字符串,可以为null返回:一个新   转义的字符串,如果输入空字符串,则返回null   3.0