您好,我正在使用 JDBC 查询,但遇到此错误,但我不明白为什么,或者此错误的确切含义是什么以及查询出了什么问题。 查询如下
private List<StatisticsLog> runStatistics(Integer partnerId, LocalDate ldStart, LocalDateTime ldtEnd, String statType)
{
return jdbcTemplate.query("SELECT S.APP_ID, S.LOG_TYPE, ACC.CONTACT_PERSON_FIRST_NAME, ACC.CONTACT_PERSON_LAST_NAME, ACV.VERSION_APP_NAME, "
+ "'" + statType.trim() + "' STATTYPE, "
+ "ACV.APP_CATALOG_ID, ACV.APP_CATALOG_VERSION_ID, ACV.VERSION, ACV.UPDATED_AT, ACV.VERSION_LOGO_EXT, ACV.HAS_LOGO, "
+ "LANG.LANGUAGE_NAME_SHORT, LANG.LANGUAGE_ID , S.count, S.PARTNER_ID, APP.CREATED_AT "
+ "FROM (SELECT partner_id, log_type, app_id, language_id, count(*) as count FROM public.statistics_log "
+ " WHERE partner_id = ? "
+ " and logged_at between ? and ? "
+ "group by 1, log_type, app_id, language_id) as S "
+ "INNER JOIN APP_CATALOG_ACCOUNT ACP ON ACP.APP_CATALOG_SERIAL_ID = S.APP_ID "
+ "INNER JOIN APP_CATALOG APP ON APP.APP_CATALOG_SERIAL_ID = S.APP_ID "
+ "INNER JOIN ACCOUNT ACC ON ACC.ACCOUNT_ID = S.PARTNER_ID "
+ "INNER JOIN APP_CATALOG_VERSION ACV on ACV.APP_CATALOG_SERIAL_ID = APP.APP_CATALOG_SERIAL_ID AND ACV.STATUS = 3 "
+ "INNER JOIN LANGUAGE LANG ON LANG.LANGUAGE_ID = ACV.LANGUAGE_ID "
+ "ORDER BY S.count desc ",
new Object[] { partnerId, ldStart, ldtEnd }, new StatisticsLogRowMapper());
}
我从本专栏 CREATED_AT
中收到错误这是应用程序目录的一部分,我认为它应该在那里,为了更详细,我还将附上 StatisticsLogRowMapper
public class StatisticsLogRowMapper implements RowMapper<StatisticsLog>
{
@Override
public StatisticsLog mapRow(ResultSet rs, int rowNum) throws SQLException
{
StatisticsLog stat = new StatisticsLog();
stat.setAppId(rs.getInt("APP_ID"));
stat.setPartnerId(rs.getInt("PARTNER_ID"));
stat.setCount(rs.getLong("COUNT"));
stat.setCreatedAt(rs.getTimestamp("CREATED_AT").toLocalDateTime());
stat.setPartnerFirstName(rs.getString("CONTACT_PERSON_FIRST_NAME"));
stat.setPartnerLastName(rs.getString("CONTACT_PERSON_LAST_NAME"));
stat.setAppNameDefault(rs.getString("VERSION_APP_NAME"));
stat.setAppCatalogId(rs.getInt("APP_CATALOG_ID"));
stat.setStatType(rs.getString("STATTYPE"));
stat.setLogType(LogTypeEnum.valueOf(rs.getString("LOG_TYPE").trim()));
stat.setAppCatalogVersionId(rs.getInt("APP_CATALOG_VERSION_ID"));
stat.setVersion(rs.getInt("VERSION"));
stat.setUpdatedAt(rs.getDate("UPDATED_AT"));
stat.setVersionLogoExt(rs.getString("VERSION_LOGO_EXT"));
stat.setHasLogo(rs.getBoolean("HAS_LOGO"));
stat.setLanguageNameShort(rs.getString("LANGUAGE_NAME_SHORT"));
stat.setLanguageId(rs.getInt("LANGUAGE_ID"));
return stat;
}
}
错误是:“PreparedStatementCallback;错误的 SQL 语法 [SELECT S.APP_ID、S.LOG_TYPE、ACC.CONTACT_PERSON_FIRST_NAME、ACC.CONTACT_PERSON_LAST_NAME、ACV.VERSION_APP_NAME、'days30' STATTYPE、ACV.APP_CATALOG_ID、ACV.APP_CATALOG_VERSION_ID、ACV。 VERSION、ACV.UPDATED_AT、ACV.VERSION_LOGO_EXT、ACV.HAS_LOGO、LANG.LANGUAGE_NAME_SHORT、S.count、S.PARTNER_ID FROM(选择partner_id、log_type、app_id、语言_id、count(*) 作为计数 FROM public.statistics_log WHERE returned_at 之间?和 ? group by 1, log_type, app_id, language_id,partner_id) as S INNER JOIN APP_CATALOG_ACCOUNT ACP ON ACP.APP_CATALOG_SERIAL_ID = S.APP_ID INNER JOIN APP_CATALOG APP ON APP.APP_CATALOG_SERIAL_ID = S.APP_ID INNER JOIN ACCOUNT ACC ON ACC.ACCOUNT_ID = S .PARTNER_ID INNER JOIN APP_CATALOG_VERSION ACV on ACV.APP_CATALOG_SERIAL_ID = APP.APP_CATALOG_SERIAL_ID AND ACV.STATUS = 3 INNER JOIN LANGUAGE LANG ON LANG.LANGUAGE_ID = ACV.LANGUAGE_ID ORDER BY S.count desc ];嵌套异常为 org.postgresql.util.PSQLException :在此结果集中找不到列名 CREATED_AT。”
IN THE ERROR SEEMS THIS FIELD ISN'T THERE SOMEHOW
如果您有任何想法可能是错误的或我可以尝试的事情,请随时发表评论,我将不胜感激,即使是最小的帮助,谢谢。
最佳答案
我可以看到查询的第 2 行有一个错误 - + "'"+ statType.trim() + "' STATTYPE, ",就在引号后面。 STATTYPE 没有表引用,并附加了一个字符串。这可能是另一个问题。我无法评论这个问题,因为我没有足够的声誉。
关于java - SQL 语法错误 - 在此结果集中未找到列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357792/