Java 当要插入的字符串位于用户生成的变量中时,如何转义SQL insert的单引号

Java 当要插入的字符串位于用户生成的变量中时,如何转义SQL insert的单引号,java,sql,jdbc,Java,Sql,Jdbc,我正在构建一个insert命令以使用jdbc执行。它的一部分是连接用户生成的字符串…在用户使用如下字符串之前,这一切都有效: 阿伯卡德 您可以执行以下任一操作: 使用PreparedStatement类。(推荐) 转义单引号 在SQL中,单引号将使用双单引号进行转义'-->' 你可以从图书馆使用。 使用此方法,您可以从html、xml、sql等中转义字符。请根据需要查找方法escapeXXX。供参考: 注意:escapeSql已在ApacheCommonsLang3中删除(请参阅哪些参考)

我正在构建一个insert命令以使用jdbc执行。它的一部分是连接用户生成的字符串…在用户使用如下字符串之前,这一切都有效:

阿伯卡德


您可以执行以下任一操作:

  • 使用PreparedStatement类。(推荐)

  • 转义单引号

    在SQL中,单引号将使用双单引号进行转义<代码>'-->'

  • 你可以从图书馆使用。 使用此方法,您可以从html、xml、sql等中转义字符。请根据需要查找方法
    escapeXXX
    。供参考:

    注意:
    escapeSql
    已在ApacheCommonsLang3中删除(请参阅哪些参考)

    例如:

    输入:

    <sometext>
    Here is some "Text" that I'd like to be "escaped" for HTML
    & here is some Swedish: Tack. Vars?god.
    </sometext>
    
    还有一个选择:

    使用专门为此目的设计的本机Android方法:

    DatabaseUtils.sqlEscapeString(String)
    
    以下是it在线文档:

    在我看来,使用这种方法的主要优点是方法名称清晰,因此可以进行自我文档化



    您需要使用参数。在StringEscapeUtils Documentation for escapeSQL中:“目前,此方法仅将单引号转换为双引号”StringEscapeUtils.escapeSQL是。此方法仅适用于以后将输入用作HTML输出的情况。关于弃用,commons lang的v3.6仍然存在,并且可以很好地与org.apache.commons.text配合使用。。
    String userString="a'bcd";
    String changedUserString = userString.replace("'","''");
            //changedUserString  = a''bcd
    String insertTableSQL = "INSERT INTO myTable (insertColumn) VALUES("
                            +" '"+changedUserString +"' )";
    
    String str = FileUtils.readFileToString(new File("input.txt"));
            String results = StringEscapeUtils.escapeHtml(str);
            System.out.println(results);
    
    <sometext>
    Here is some "Text" that I'd like to be "escaped" for HTML
    & here is some Swedish: Tack. Vars?god.
    </sometext>
    
    &lt;sometext&gt;
    Here is some &quot;Text&quot; that I'd like to be &quot;escaped&quot; for HTML
    &amp; here is some Swedish: Tack. Vars&aring;god.
    &lt;/sometext&gt;
    
    DatabaseUtils.sqlEscapeString(String)
    
    String userString="a'bcd";
    String insertTableSQL = "INSERT INTO myTable "
                                + "(insertColumn) " 
                                + "VALUES("
                                    +"'"+DatabaseUtils.sqlEscapeString(userString)+"'"
                                    +")";
    
    statement.executeUpdate(insertTableSQL);