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

Error while passing startDate and endDate as parameters in SQL query through java

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

请告诉我我做错了什么?

试试这个..

private static final String QUERY ="SELECT * FROM CASE_UPLOADS WHERE  UPLOAD_DT >='" + startDate + "' AND UPLOAD_DT <='" + endDate +"'";

AND

之前需要 space

可能是因为您的日期格式。 SQL 日期格式如下所示:

日期 - 格式 YYYY-MM-DD

你像这样格式化你的日期:SimpleDateFormat("dd/MM/yyy")

您需要 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')";