1

我想要泛化方法将普通 sql 查询转换为 java 中的参数化 sql

我有以下已在项目中使用的方法。这有很多参考。

    public Object executeQuery(String aQuery) {
    Connection con = null;
    Statement stmt = null;
    ResultSet r = null;
    try {

        con = getConnection() ;
        stmt = con.createStatement();
        r = stmt.executeQuery(aQuery);

        if (r.next()) {
            //return extracted result;
        }

        return null;
    } catch (SQLException e) {
        throw new RuntimeException(
            "Cannot execute query " + aQuery + " : " + e.getMessage());
    } finally {
        cleanup(r,stmt,con);
    }
    }

    //=========
    //calling above method
    executeQuery("Update USER set user_id = 15 where user_name='test');

我正在考虑使用 java 准备语句将其转换为参数化 sql。然后方法调用不会改变,但查询像

       Update USER set user_id = 15 where user_name='test' 

将使用 java PreparedStatement 和适当的参数

       Update USER set user_id = ? where user_name=? 

有没有办法像使用 Spring 或其他框架一样做到这一点。

提前致谢 !

4

1 回答 1

2

然后方法调用不会改变

绝对应该更改调用方法。我强烈建议您不要尝试手动执行此操作。如果调用者未能正确地转义它们的值,那么您已经损坏了 SQL - 尝试修复它以使用参数更正 SQL 将是一件痛苦的事情。

我建议您重载该方法,并逐渐将调用者从损坏的方法转移到工作方法。(当然,立即弃用损坏的。)

我意识到可能有很多来电者,因此需要做很多工作——但这​​只是让它坏了这么久的结果。现在就解决根本问题,而不是仅仅在上面贴膏药。

于 2013-03-04T07:43:41.393 回答