简体   繁体   English

ORA-00900:无效的SQL语句-NamedParameterJdbcTemplate

[英]ORA-00900: invalid SQL statement - NamedParameterJdbcTemplate

I have this query as a property constant: 我有此查询作为属性常量:

get.policy.list=SELECT policy FROM table WHERE policy IN (:policyList) AND state = :state

On feeding and getting a list from the jdbcTemplate, I get: 从jdbcTemplate获取和获取列表时,我得到:

Caused by: java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement 引起原因:java.sql.SQLSyntaxErrorException:ORA-00900:无效的SQL语句

on the first line inside the try block. 在try块的第一行。

@Override
    public List<MyVO> areValidPolicies(String state, List<String> policyList) {

        MapSqlParameterSource namedParameters = new MapSqlParameterSource().addValue("state", state)
                .addValue("policyList", policyList);

        List<MyVO> retrievedPolicyList = new ArrayList<MyVO>();

        try{
            retrievedPolicyList = myNamedJdbcTemplate.query("SELECT policy FROM table WHERE policy IN (:policyList) AND state = :state", namedParameters, new RowMapper<MyVO>() {

                        @Override
                        public MyVO mapRow(ResultSet rs, int rowNum) throws SQLException {
                            MyVO myVO = new MyVO();
                            MyVO.setPolicy(rs.getString("policy"));
                            return myVO;
                        }
                    });
        } catch (Exception ex){
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }

        retrievedPolicyList.stream().forEach(System.out::println);

        return retrievedPolicyList;
    }

Stack trace : 堆栈跟踪

 org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [get.policy.list]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement

    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:684)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:711)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:761)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:192)
    at com.project.policyImpl.areValidPolicies(ESRepublishDaoImpl.java:56)
    at com.project.policyImpl$$FastClassBySpringCGLIB$$683fad37.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)

Please guide on where am I getting wrong. 请指导我在哪里弄错了。

table is a reserved word in SQL. table是SQL中的保留字。 I suggest renaming the table to avoid future hassle, but if that's not an option, you could escape it by using double quotes ( " ): 我建议重命名该表以避免将来出现麻烦,但是如果不这样做,则可以使用双引号( " )对其进行转义:

 retrievedPolicyList = 
     myNamedJdbcTemplate.query("SELECT policy FROM \"table\" WHERE policy IN (:policyList) AND state = :state", namedParameters, new RowMapper<MyVO>() {
     // Here --------------------------------------^^-----^^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQLSyntaxErrorException:ORA-00900:使用Java的无效SQL语句 - SQLSyntaxErrorException: ORA-00900: invalid SQL statement using Java java.sql.SQLException:ORA-00900:Ecllips中的无效SQL语句 - java.sql.SQLException: ORA-00900: invalid SQL statement in Ecllips setRepositoryConnection中的错误:java.sql.SQLException:ORA-00900:无效的SQL语句 - Error in setRepositoryConnection : java.sql.SQLException: ORA-00900: invalid SQL statement 从java运行Oracle sql脚本会产生SQLSyntaxErrorException:ORA-00900:无效的SQL语句 - Running Oracle sql script from java gives SQLSyntaxErrorException: ORA-00900: invalid SQL statement SQL状态[null];错误代码[0]; ORA-00900:带有jdbcTemplate的无效SQL语句 - SQL state [null]; error code [0]; ORA-00900: invalid SQL statement with jdbcTemplate 使用@ UseStringTemplate3StatementLocator时,JDBI给出错误“ ORA-00900:无效的SQL语句” - JDBI gives error “ORA-00900: invalid SQL statement” when using @UseStringTemplate3StatementLocator ORA-00900:从Java导出Oracle数据库时无效的SQL语句 - ORA-00900: invalid SQL statement while exporting an Oracle database from Java 错误:ORA-00900 SQLStatement无效,但语句仍按预期运行 - Error: ORA-00900 Invalid SQLStatement but statement still works as intended SQLException(ORA-00900),带有Java至PL SQL日期 - SQLException (ORA-00900) with Java to PL SQL Date 来自 JDBC 的 PL/SQL 调用导致“SQLSyntaxErrorException:ORA-00900” - PL/SQL call from JDBC resulting in “SQLSyntaxErrorException: ORA-00900”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM