AP和SQL的APOSTROPHE问题

时间:2017-01-03 15:34:20

标签: java sql apostrophe

我有代码,我的搜索中有单引号或APOSTROPHE

我有拥有测试表的数据库,并且名称列中的值为"my'test"

运行时

SELECT * from test WHERE name = 'my''test';

这很好用

如果我在Java程序中使用它,我没有收到任何错误或任何结果

但如果我只用单引号命名,那么它就可以了

SELECT * from test WHERE name = 'my'test';

请你帮我理解。

Java代码

    Connection con = null;
    PreparedStatement prSt = null;
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.
            getConnection("jdbc:oracle:thin:@localhost:1521:orcl"
                ,"user","pwd");
        String query = "SELECT * from "
                + "WHERE name = ? ";
        prSt = con.prepareStatement(query);

        String value = "my'mobile";
        char content[] = new char[value.length()];
        value.getChars(0, value.length(), content, 0);
        StringBuffer result = new StringBuffer(content.length + 50);
        for (int i = 0; i < content.length; i++) {
            if (content[i] == '\'')
            {
                result.append("\'");
                result.append("\'");
            }
            else
            {
            result.append(content[i]);
            }
        }
        prSt.setObject(1, result.toString());
        int count = prSt.executeUpdate();
        System.out.println("===============>    "+count);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally{
        try{
            if(prSt != null) prSt.close();
            if(con != null) con.close();
        } catch(Exception ex){}
    }

1 个答案:

答案 0 :(得分:1)

您不必为PreparedStatement

的参数转义任何内容

只需使用:

prSt = con.prepareStatement(query);
prSt.setString("my'mobile");

此外:如果您使用SELECT语句检索数据,则需要使用executeQuery()而不是executeUpdate()

ResultSet rs = prst.executeQuery();
while (rs.next())
{
   // process the result here
}

在继续项目之前,您可能希望浏览JDBC教程:http://docs.oracle.com/javase/tutorial/jdbc/index.html