【问题标题】:JDBC Template queryingJDBC 模板查询
【发布时间】:2014-12-09 08:24:17
【问题描述】:

我正在尝试使用 jdbc 模板执行此方法:

 public String getClientName(String uuid) {
    System.out.println("UUID here in the dao layer is: " + uuid);
    String sql = "Select email from client where uuid=?";

    return jdbcTemplate.query(sql, new ResultSetExtractor<String>() {

        @Override
        public String extractData(ResultSet rs) throws SQLException,        DataAccessException {
            return rs.getString("email");
        }
    });
}

但是我收到了这个错误:

SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [Select email from client where uuid=?]; nested exception is org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying =?
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

我哪里错了?

【问题讨论】:

    标签: java spring postgresql jdbc


    【解决方案1】:

    您没有将作为参数获得的 uuid 传递给您的方法。您可以使用 api 之类的:

    Object sqlParameters[] = {uuid};
    return jdbcTemplate.query(sql, sqlParameters,
    new ResultSetExtractor<List<String>>() {  
        @Override
        public List<String> extractData(ResultSet rs) throws SQLException, DataAccessException {
            List<String> emailList=new ArrayList<String>();  
            while (rs.next()) {
                emailList.add(rs.getString("email"));
            }
            return emailList;
        }});
    

    【讨论】:

    • 谢谢,我已经注意到并纠正了这个问题,但是我现在得到这个错误“结果集没有正确定位”
    • 这可能是因为您获得了多个电子邮件 ID,并且您没有对它们进行迭代。试试更新的代码。
    • 好像是这样。谢谢伙计。我不知道我收到了 2 个电子邮件地址。我假设我收到了一个。
    【解决方案2】:

    你没有在任何地方使用你的 uuid 参数......我怀疑你真的想要:

    return jdbcTemplate.query(sql, new Object[] { uuid },
        new ResultSetExtractor<String>() { ... });
    

    这样uuid 将用作 SQL 中参数的值。

    【讨论】:

    • 谢谢,似乎是这样,但是在说明“结果集未正确定位”后我又遇到了另一个错误。
    • 感谢乔恩,你也帮助我解决了这个问题。是的,我没有正确地遍历结果集。
    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多