我一生都无法弄清楚为什么下面的查询会返回此错误消息:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;
bad SQL grammar [INSERT INTO Survey (survey.PK1, survey.USERS_PK1,
survey.ACCREDITATION_PK1, survey.PRIVACY_TYPE_PK1, survey.EVAL_FORM_PK1,
survey.TITLE, survey.DESCRIPTION, to_date(survey.START_DATE),
survey.START_TIME, to_date(survey.END_DATE), survey.END_TIME,
survey.HAS_GRADECENTER_COLUMN, survey.HAS_ANNOUNCEMENT )
VALUES(survey_SEQ.nextval,?,?,?,?,?,?,?,?,?,?,?,?)];
nested exception is java.sql.SQLSyntaxErrorException: ORA-00917: missing comma
String sql = "INSERT INTO UHCL_PR_survey " +
"(" +
"PK1, " +
"USERS_PK1, " +
"ACCREDITATION_PK1, " +
"PRIVACY_TYPE_PK1, " +
"EVAL_FORM_PK1, " +
"TITLE, " +
"DESCRIPTION, " +
"to_date(START_DATE), " +
"START_TIME, " +
"to_date(END_DATE), " +
"END_TIME, " +
"HAS_GRADECENTER_COLUMN, " +
"HAS_ANNOUNCEMENT " +
") " +
"VALUES (UHCL_PR_survey_SEQ.nextval,?,?,?,?,?,?,?,?,?,?,?,?) ";
Object[] parameters = new Object[]{
survey.getUsersPk1(),
survey.getAccreditationPk1(),
survey.getPrivacyTypePk1(),
survey.getFormTypePk1(),
survey.getTitle(),
survey.getDescription(),
new java.sql.Date(survey.getStartDate().toDate().getTime()),
survey.getStartTimeAsUtilString(),
new java.sql.Date(survey.getEndDate().toDate().getTime()),
survey.getEndTimeAsUtilString(),
survey.getGradeCenterColumn(),
survey.getAnnouncement()
};
this.jdbcTemplate.update(sql, parameters);
最佳答案
请勿在 INSERT
语句中的列名称中的 START_DATE
和 END_DATE
两侧添加 to_date
。
一方面,INSERT
语句的该部分应该只列出列的名称。我怀疑您的列名称为 START_DATE
和 END_DATE
,并且您的表中实际上没有名为 to_date(START_DATE)
的列> 和截止日期(END_DATE)
。
其次,您的 INSERT
语句中的任何位置都不需要 TO_DATE
。 JDBC 会自动将所有Date
转换为相关的特定于DBMS 的DATE
类型。
关于java - JDBCTemplate INSERT INTO 语句 : Can't figure out error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115896/