java - JDBCTemplate INSERT INTO 语句 : Can't figure out error

标签 java sql jdbctemplate

我一生都无法弄清楚为什么下面的查询会返回此错误消息:

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_DATEEND_DATE 两侧添加 to_date

一方面,INSERT 语句的该部分应该只列出列的名称。我怀疑您的列名称为 START_DATEEND_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/

相关文章:

java - 使用 Rhino 从 Clojurescript 生成 Java 类

java - 使用 h :commandButton or p:commandButton? 打开新窗口/选项卡

java - 如何从Spring获取最终查询?

mysql - 使用 sysdate 时出现 SQL 语法错误

mysql - 使用 JDBCTemplate 对 varchar 值求和

java - Swing 文本字段中的文本颜色更改延迟

mysql - 检索具有最小日期的行中的所有列?

mysql - 从两个表中查找第三个表中不存在的组合

java - Spring jdbctemplate 在应用程序关闭时关闭连接?

java - jdbcTemplate.query(PreparedStatementCreator psc, ResultSetExtractor<T> rse) 不返回任何结果集