我将startDate和endDate作为上个月的开始日期和当前日期的上个月的结束日期。我试图在java程序的SQL查询中使用这些字段。
我的代码如下所示:
public class DocumentUploads extends BaseSqlQuery<DocumentUploadDetails> {
static Date currentDate = new Date();
static Calendar c = Calendar.getInstance();
static String startDate ;
static String endDate;
static{
c.set(currentDate.getYear()+1900,currentDate.getMonth() -1, c.getActualMinimum(Calendar.DAY_OF_MONTH));
startDate = new SimpleDateFormat("dd/MM/yyy").format(c.getTime());
c.set(currentDate.getYear()+1900,currentDate.getMonth() -1, c.getActualMaximum(Calendar.DAY_OF_MONTH));
endDate = new SimpleDateFormat("dd/MM/yyy").format(c.getTime());
}
@Override
public String getQuery() {
return QUERY;
}
@Override
public void declareParameters() {
}
@Override
public DocumentUploadDetails mapRow(ResultSet resultSet, int rowNum)
throws SQLException {
DocumentUploadDetails appointment = new DocumentUploadDetails();
appointment.setId(resultSet.getLong("ID"));
appointment.setAppNum(resultSet.getLong("APP_NUM"));
appointment.setCaseNum(resultSet.getString("CASE_NUM"));
appointment.setDocType(resultSet.getString("DOC_TYPE"));
appointment.setSource(resultSet.getString("SOURCE"));
appointment.setUploadDate(resultSet.getDate("UPLOAD_DT"));
return appointment;
}
private static final String QUERY ="SELECT * FROM CASE_UPLOADS WHERE UPLOAD_DT >=" + startDate + "AND UPLOAD_DT <=" + endDate;
}
执行我的代码后,我收到以下错误:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM CASE_UPLOADS WHERE UPLOAD_DT >=01/05/15AND UPLOAD_DT <=31/05/15]; nested exception is java.sql.SQLException: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:99)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:772)
at org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:111)
at org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:121)
at org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:136)
at com.leader.ladpss.document.data.controller.QueryController.getCaseUploadsDetails(QueryController.java:15)
at com.leader.ladpss.document.Application.main(Application.java:20)
我尝试将startDate和endDate的数据类型转换为Date并删除SimpleDateFormat函数的使用。但它还是不起作用。
请告诉我这里我做错了什么?
答案 0 :(得分:2)
您需要Oracle TO_DATE
函数才能正确格式化日期。
private static final String QUERY = "SELECT *
FROM CASE_UPLOADS
WHERE UPLOAD_DT >= to_date('" + startDate + "', 'dd/MM/yyy')
AND UPLOAD_DT <= to_date('" + endDate + "', 'dd/MM/yyy')";
答案 1 :(得分:0)
试试这个..
private static final String QUERY ="SELECT * FROM CASE_UPLOADS WHERE UPLOAD_DT >='" + startDate + "' AND UPLOAD_DT <='" + endDate +"'";
在AND之前需要一个空格
答案 2 :(得分:0)
也许是因为你的日期格式。 SQL日期格式如下所示:
日期 - 格式YYYY-MM-DD
您可以像这样格式化日期:SimpleDateFormat(&#34; dd / MM / yyy&#34;)