簡體   English   中英

NamedParameterJdbcTemplate不支持SUM()嗎?

[英]NamedParameterJdbcTemplate NOT SUPPORT SUM()?

我使用的是NamedParameterJdbcTemplate,下面的SQL在Oraclie SQL Developer中運行良好。

從LICENSEPRINTRECORD中選擇sum(PRINTEDLICNUM),sum(PRINTEDLICCOPYNUM),PRIPID,其中('370212230027855')GROUP BY PRIPID中的PRIPID;

但是此代碼在NamedParameterJdbcTemplate中不起作用

Map namedParameters = Collections.singletonMap("pripids", pripIds);
StringBuffer recordQueryString = new StringBuffer();
recordQueryString.append("SELECT SUM(PRINTEDLICNUM), SUM(PRINTEDLICCOPYNUM), PRIPID from LICENSEPRINTRECORD where PRIPID in (:pripids) GROUP BY PRIPID");
List<PreviousPrintRecords> records = template.query(recordQueryString.toString(), namedParameters, new RowMapper<PreviousPrintRecords>());

下面是我的RowMapper類:

public class PreviousPrintRecords implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = -3763072257141955974L;
private int printedLicNum;
private int printedLicCopyNum;
private String pripId;  

public PreviousPrintRecords() {
    super();
}

public PreviousPrintRecords(int printedLicNum, int printedLicCopyNum, String pripId) {
    super();
    this.printedLicNum = printedLicNum;
    this.setPrintedLicCopyNum(printedLicCopyNum);
    this.pripId = pripId;
}

public int getPrintedLicNum() {
    return printedLicNum;
}

public void setPrintedLicNum(int printedLicNum) {
    this.printedLicNum = printedLicNum;
}

public String getPripId() {
    return pripId;
}

public void setPripId(String pripId) {
    this.pripId = pripId;
}

public int getPrintedLicCopyNum() {
    return printedLicCopyNum;
}

public void setPrintedLicCopyNum(int printedLicCopyNum) {
    this.printedLicCopyNum = printedLicCopyNum;
}

}

它將發生錯誤,嵌套異常是java.sql.SQLException:無效的列名

下面是詳細的跟蹤:

10:48:09,477 INFO  [stdout] (DefaultThreadPoolService1) 2018-05-15 10:48:09 INFO  o.s.j.support.SQLErrorCodesFactory - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
10:48:09,532 INFO  [stdout] (DefaultThreadPoolService1) 2018-05-15 10:48:09 ERROR c.a.p.a.task.GetLicenseItemListTask - Get licenseitem task occurs error org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT SUM(PRINTEDLICNUM), SUM(PRINTEDLICCOPYNUM), PRIPID from LICENSEPRINTRECORD where PRIPID in (?, ?, ?, ?, ?, ?, ?) GROUP BY PRIPID]; nested exception is java.sql.SQLException: Invalid column name

10:48:09,532 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)

10:48:09,532 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)

10:48:09,532 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649)

10:48:09,532 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:684)

10:48:09,532 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:711)

10:48:09,533 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:761)

10:48:09,533 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:192)

10:48:09,533 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:199)

10:48:09,534 INFO  [stdout] (DefaultThreadPoolService1)     at com.aw.product.abp.licenseprint.service.DaoLicensePrintService.requestLicensePrintItemData(DaoLicensePrintService.java:167)

10:48:09,534 INFO  [stdout] (DefaultThreadPoolService1)     at com.aw.product.abp.task.GetLicenseItemListTask.run(GetLicenseItemListTask.java:85)

10:48:09,534 INFO  [stdout] (DefaultThreadPoolService1)     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

10:48:09,534 INFO  [stdout] (DefaultThreadPoolService1)     at java.util.concurrent.FutureTask.run(FutureTask.java:266)

10:48:09,534 INFO  [stdout] (DefaultThreadPoolService1)     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

10:48:09,535 INFO  [stdout] (DefaultThreadPoolService1)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

10:48:09,535 INFO  [stdout] (DefaultThreadPoolService1)     at java.lang.Thread.run(Thread.java:745)

10:48:09,535 INFO  [stdout] (DefaultThreadPoolService1) Caused by: java.sql.SQLException: Invalid column name

10:48:09,535 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)

10:48:09,535 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)

10:48:09,537 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)

10:48:09,539 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)

10:48:09,539 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)

10:48:09,539 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)

10:48:09,539 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3367)

10:48:09,540 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2009)

10:48:09,540 INFO  [stdout] (DefaultThreadPoolService1)     at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494)

10:48:09,540 INFO  [stdout] (DefaultThreadPoolService1)     at org.jboss.jca.adapters.jdbc.WrappedResultSet.getString(WrappedResultSet.java:1381)

10:48:09,540 INFO  [stdout] (DefaultThreadPoolService1)     at com.aw.product.abp.licenseprint.service.DaoLicensePrintService$2.mapRow(DaoLicensePrintService.java:173)

10:48:09,540 INFO  [stdout] (DefaultThreadPoolService1)     at com.aw.product.abp.licenseprint.service.DaoLicensePrintService$2.mapRow(DaoLicensePrintService.java:1)

10:48:09,541 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)

10:48:09,541 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)

10:48:09,541 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:697)

10:48:09,543 INFO  [stdout] (DefaultThreadPoolService1)     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)

10:48:09,543 INFO  [stdout] (DefaultThreadPoolService1)     ... 12 more

NamedParameterJdbcTemplate不支持sum函數嗎? 如果我想使用sum函數,有什么方法可以實現?

java.sql.SQLException:無效的列名

足夠明顯的例外。 您用錯誤的方式正確命名了表列名稱。

您正在使用rowMapper類,但未定義列名稱。

如下更改代碼

recordQueryString.append("SELECT SUM(PRINTEDLICNUM) AS printedLicNum, SUM(PRINTEDLICCOPYNUM) AS printedLicCopyNum, PRIPID from LICENSEPRINTRECORD where PRIPID in (:pripids) GROUP BY PRIPID");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM