java 和 SQL 的撇号问题

APOSTROPHE issue with java and SQL

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

我有一个正在测试 table 的数据库,名称列中的值是 "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){}
    }

您不必为 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