原因:java.sql.SQLException:列索引无效

原因:java.sql.SQLException:列索引无效,java,sql,oracle,spring-jdbc,Java,Sql,Oracle,Spring Jdbc,我试图通过使用SpringJDBCTemplate传递2列作为筛选器来删除一条记录。但我不知道下面的代码有什么问题。我在下面提到了例外情况。我已经签入了dedug,requestId和qtId值即将出现 public void deleteTxn(String sql, int requestId, int qtId) { try { jdbcTemplate.update(sql, new Object[]{

我试图通过使用SpringJDBCTemplate传递2列作为筛选器来删除一条记录。但我不知道下面的代码有什么问题。我在下面提到了例外情况。我已经签入了dedug,requestId和qtId值即将出现

public void deleteTxn(String sql, int requestId, int qtId) {
    try {
            jdbcTemplate.update(sql,
                    new Object[]{
                    requestId,
                    qtId
                    }); 
        } catch(Exception e) {
            //
        }
    }
}

String sql = "DELETE FROM TABLE1 WHERE COL1 = ? AND COL2 = ?";
例外情况:

org.springframework.jdbc.InvalidResultSetAccessException: PreparedStatementCallback;对SQL[DELETE]的ResultSet访问无效 来自表1,其中COL1=?和COL2=?];嵌套异常是 java.sql.SQLException:处的列索引无效 org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslateSQLErrorCodeSQLExceptionTranslator.java:235 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.TranslateAstractFallbackSqlExceptionTranslator.java:73 在 org.springframework.jdbc.core.jdbcttemplate.executeJdbcTemplate.java:660 在 org.springframework.jdbc.core.JdbcTemplate.updateJdbcTemplate.java:909 在 org.springframework.jdbc.core.JdbcTemplate.updateJdbcTemplate.java:970 在 org.springframework.jdbc.core.JdbcTemplate.updateJdbcTemplate.java:980

jdbcTemplate.update有两个类似的方法签名:

updatejava.lang.String sql,java.lang.Object。。。args

updatejava.lang.String sql、java.lang.Object[]args、int[]argTypes

在本例中,选择第一个重载方法是因为您没有提供int[]argTypes,因此update语句只有一个参数,即新对象[]{requestId,qtId}

解决方案很简单:只需编写jdbcTemplate.updatesql、requestId、qtId

或者,如果要提供类型,请执行以下操作:

jdbcTemplate.update(sql, new Object[]{requestId, qtId}, 
                         new int[]{Types.BIGINT, Types.BIGINT});
jdbcTemplate.update有两个类似的方法签名:

updatejava.lang.String sql,java.lang.Object。。。args

updatejava.lang.String sql、java.lang.Object[]args、int[]argTypes

在本例中,选择第一个重载方法是因为您没有提供int[]argTypes,因此update语句只有一个参数,即新对象[]{requestId,qtId}

解决方案很简单:只需编写jdbcTemplate.updatesql、requestId、qtId

或者,如果要提供类型,请执行以下操作:

jdbcTemplate.update(sql, new Object[]{requestId, qtId}, 
                         new int[]{Types.BIGINT, Types.BIGINT});