通过 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')";
我将 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')";