2016-08-23 3 views
0

Ich bin Herausforderung beim Abrufen der automatisch generierten Spalte der Oracle-Tabelle in meinem Spring Batch POC.Spring Batch Writer löst java.sql.SQLException aus: Nicht unterstützte Funktion

Dieser POC liest Daten aus der Flat-Datei und lädt diese in die Oracle-Tabelle. Ich versuche, Oracle Sequence zu verwenden, um einen Primärschlüssel für die Tabelle zu generieren und diesen nach dem erfolgreichen Einfügen der Zeile aus der Spring Batch Writer-Implementierung abzurufen. Aber es löst folgenden Fehler.

Ich bin mir nicht sicher, dass ich etwas oder irgendein Problem im Zusammenhang mit Oracle-Treiber vermisse. Brauche deine wertvollen Eingaben.

Spezifikationen:

Oracle Database version 11.1.0.7 
Oracle Driver that is added to Maven Proj ojdbc14-10.1.0.5.jar 
JDK Version 1.8 
spring.version 4.0.5.RELEASE 
spring.jdbc.version 4.0.5 
spring.batch.version 3.0.4.RELEASE 

Mein job.xml

<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate"> 
<constructor-arg ref="dataSource"/> 
</bean> 

Meine CustomerItemWriter Klasse:

public class CustomItemWriter implements ItemWriter<Permission> 
{ 

private final static String INSERT_SQL = "insert into CUSTOMERS (CUST_ID,FIRSTNAME,LASTNAME,CREATED_DATE) VALUES (CUST_ID_SEQ.NEXTVAL,:firstname,:lastname,:CreatedDate)"; 

    @Autowired 
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 

    @Override 
    public void write(List<? extends Customer> customers) throws Exception 
    { 
     for(Customer customer : customers) 
     { 
      MapSqlParameterSource namedParameters = new MapSqlParameterSource(); 
      namedParameters.addValue("firstname", customer.getLdapUserId()); 
      namedParameters.addValue("lastname", customer.getRoleId());    
      namedParameters.addValue("CreatedDate", customer.getCreatedDate()); 

      final KeyHolder holder = new GeneratedKeyHolder(); 
      this.namedParameterJdbcTemplate.update(INSERT_SQL, namedParameters, holder, new String[] {"CUST_ID" }); 
      Number generatedId = holder.getKey(); 
      System.out.println("Oracle Seq value " + generatedId.intValue()); 
     } 
    } 

Ausnahme erhalten während der Ausführung:

Aug 24, 2016 12:02:56 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]728938a9: startup date [Wed Aug 24 00:02:56 EDT 2016]; root of context hierarchy 
Aug 24, 2016 12:02:56 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [META-INF/spring/job-config.xml] 
Aug 24, 2016 12:02:56 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [META-INF/spring/context-config.xml] 
Aug 24, 2016 12:02:56 AM org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition 
INFO: Overriding bean definition for bean 'customReader': replacing [Generic bean: class [org.springframework.batch.item.file.FlatFileItemReader]; scope=step; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [META-INF/spring/context-config.xml]] with [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [META-INF/spring/context-config.xml]] 
Aug 24, 2016 12:02:56 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName 
INFO: Loaded JDBC driver: oracle.jdbc.xa.client.OracleXADataSource 
Aug 24, 2016 12:02:57 AM org.springframework.batch.core.launch.support.SimpleJobLauncher afterPropertiesSet 
INFO: No TaskExecutor has been set, defaulting to synchronous executor. 
Aug 24, 2016 12:02:57 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName 
INFO: Loaded JDBC driver: oracle.jdbc.xa.client.OracleXADataSource 
Aug 24, 2016 12:03:00 AM org.springframework.batch.core.launch.support.SimpleJobLauncher run 
INFO: Job: [FlowJob: [name=GCMPBatchFeedJob]] launched with the following parameters: [{date=1472011377348, inputFile=C:/Work/BatchPOC/springbatch/GCMPBatchFeed/target/GCMPFeedData1.csv}] 
Aug 24, 2016 12:03:06 AM org.springframework.batch.core.job.SimpleStepHandler handleStep 
INFO: Executing step: [importFileStep] 
Aug 24, 2016 12:03:09 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml] 
Aug 24, 2016 12:03:09 AM org.springframework.jdbc.support.SQLErrorCodesFactory <init> 
INFO: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase] 
Aug 24, 2016 12:03:09 AM org.springframework.batch.core.step.AbstractStep execute 
SEVERE: Encountered an error executing step importFileStep in job GCMPBatchFeedJob 
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO CUSTOMERS (CUST_ID,FIRSTNAME,LASTNAME,CREATED_DATE) VALUES (CUST_ID_SEQ.NEXTVAL, ?, ?, ?)]; SQL state [null]; error code [17023]; Unsupported feature; nested exception is java.sql.SQLException: Unsupported feature 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) 
    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.update(JdbcTemplate.java:943) 
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:344) 
    at com.comp.sbatch.writer.CustomItemWriter.write(CustomItemWriter.java:171) 
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:175) 
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:151) 
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.write(SimpleChunkProcessor.java:274) 
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:199) 
    at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75) 
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406) 
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330) 
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) 
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:271) 
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:77) 
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:368) 
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215) 
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144) 
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:257) 
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:198) 
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) 
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64) 
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:165) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144) 
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134) 
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:304) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135) 
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128) 
    at com.comp.sbatch.App.main(App.java:35) 
Caused by: java.sql.SQLException: Unsupported feature 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227) 
    at oracle.jdbc.driver.DatabaseError.throwUnsupportedFeatureSqlException(DatabaseError.java:537) 
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3094) 
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:233) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:638) 
    ... 29 more 
+1

Sie müssen * full * stacktrace – Andremoniy

+0

@Andremoniy Ich habe meine ursprüngliche Post mit detaillierten Ausnahme Stack-Trace bearbeitet. Lesen Sie bitte. – VenkatRam

+0

Versuchen Sie, zu einem neueren Treiber zu wechseln, der zu Ihrer Datenbankversion passt. In Ihrem Fall sollte es "ojdbc6.jar" sein (aber nicht "ojdbc7.jar", das mit Oracle 12 verwendet wird und Probleme mit Oracle 11 hat). –

Antwort

0

Sie müssen zu einem neueren Treiber wechseln, der zu Ihrer Datenbankversion passt. In Ihrem Fall sollte es ojdbc6.jar sein (aber nicht ojdbc7.jar, das mit Oracle 12 verwendet wird und Probleme mit Oracle 11 hat).

Verwandte Themen