java和sql中的撇号问题

zvokhttg  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(264)

我有代码,在搜索中有单引号或撇号
我有一个数据库,它有一个测试表,在name列中的值是 "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){}
    }
ekqde3dh

ekqde3dh1#

对于一个 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

相关问题