通过java在SQL查询中将startDate和endDate作为参数传递时出错

时间:2015-06-12 09:48:34

标签: java oracle jdbc

我将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函数的使用。但它还是不起作用。

请告诉我这里我做错了什么?

3 个答案:

答案 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;)