java和SQL中的撇号问题

java和SQL中的撇号问题,java,sql,apostrophe,Java,Sql,Apostrophe,我有代码,在搜索中有单引号或撇号 我有一个数据库,它有一个测试表,在名称列中的值是“我的测试” 跑步时 SELECT * from test WHERE name = 'my''test'; 这个很好用 如果我在Java程序中使用相同的方法,我不会得到任何错误或结果 但是如果我只引用一句话就可以了 SELECT * from test WHERE name = 'my'test'; 你能帮我弄明白吗 Java代码是 Connection con = null; Prepare

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

我有一个数据库,它有一个测试表,在名称列中的值是“我的测试”

跑步时

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){}
    }
连接con=null;
PreparedStatement prSt=null;
试一试{
类forName(“oracle.jdbc.driver.OracleDriver”);
con=驾驶员管理器。
getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”
“用户”、“pwd”);
String query=“选择*from”
+“其中name=?”;
prSt=con.prepareStatement(查询);
String value=“我的手机”;
字符内容[]=新字符[value.length()];
value.getChars(0,value.length(),content,0);
StringBuffer结果=新的StringBuffer(content.length+50);
for(int i=0;i”+计数);
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(SQLE异常){
e、 printStackTrace();
}最后{
试一试{
如果(prSt!=null)prSt.close();
如果(con!=null)con.close();
}捕获(例外情况除外){}
}

对于
PreparedStatement

只需使用:

prSt = con.prepareStatement(query);
prSt.setString("my'mobile");
另外:如果使用
SELECT
语句检索数据,则需要使用
executeQuery()
而不是
executeUpdate()


在继续项目之前,您可能需要先阅读JDBC教程:

向我们展示您的Java代码。但是看起来您没有使用
PreparedStatement
,否则您就不会有problem@horse请看代码,你把事情搞得太复杂了。只需使用
prSt.setString(1,“我的手机”)
这就是
PreparedStatement
的美妙之处:你不必逃避任何事情,JDBC驱动程序会为你做任何必要的逃避。@andreas感谢你的回复,但它过去可以处理上述代码,但突然我想,在java 1.7之后,我认为它不会再工作了
ResultSet rs = prst.executeQuery();
while (rs.next())
{
   // process the result here
}