Spring Batch Writer throws java.sql.SQLException: Unsupported feature -
i facing challenge in retrieving auto generated column of oracle table in spring batch poc.
this poc reads data flat file , loads oracle table. trying use oracle sequence generate primary key table , retrieve upon successful insertion of row spring batch writer implementation. throws folllowing error.
org.springframework.jdbc.uncategorizedsqlexception: preparedstatementcallback; uncategorized sqlexception sql
i not sure missing or issue related oracle driver. need valuable inputs.
specifications:
oracle database version 11.1.0.7 oracle driver added 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
my job.xml
<bean class="org.springframework.jdbc.core.namedparam.namedparameterjdbctemplate" id="namedparameterjdbctemplate"> <constructor-arg ref="datasource"/> </bean>
my customeritemwriter class:
public class customitemwriter implements itemwriter<permission> { private final static string insert_sql = "insert 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()); } }
exception received while executing:
aug 24, 2016 12:02:56 org.springframework.context.support.classpathxmlapplicationcontext preparerefresh info: refreshing org.springframework.context.support.classpathxmlapplicationcontext@728938a9: startup date [wed aug 24 00:02:56 edt 2016]; root of context hierarchy aug 24, 2016 12:02:56 org.springframework.beans.factory.xml.xmlbeandefinitionreader loadbeandefinitions info: loading xml bean definitions class path resource [meta-inf/spring/job-config.xml] aug 24, 2016 12:02:56 org.springframework.beans.factory.xml.xmlbeandefinitionreader loadbeandefinitions info: loading xml bean definitions class path resource [meta-inf/spring/context-config.xml] aug 24, 2016 12:02:56 org.springframework.beans.factory.support.defaultlistablebeanfactory registerbeandefinition info: overriding bean definition 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]] [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 org.springframework.jdbc.datasource.drivermanagerdatasource setdriverclassname info: loaded jdbc driver: oracle.jdbc.xa.client.oraclexadatasource aug 24, 2016 12:02:57 org.springframework.batch.core.launch.support.simplejoblauncher afterpropertiesset info: no taskexecutor has been set, defaulting synchronous executor. aug 24, 2016 12:02:57 org.springframework.jdbc.datasource.drivermanagerdatasource setdriverclassname info: loaded jdbc driver: oracle.jdbc.xa.client.oraclexadatasource aug 24, 2016 12:03:00 org.springframework.batch.core.launch.support.simplejoblauncher run info: job: [flowjob: [name=gcmpbatchfeedjob]] launched following parameters: [{date=1472011377348, inputfile=c:/work/batchpoc/springbatch/gcmpbatchfeed/target/gcmpfeeddata1.csv}] aug 24, 2016 12:03:06 org.springframework.batch.core.job.simplestephandler handlestep info: executing step: [importfilestep] aug 24, 2016 12:03:09 org.springframework.beans.factory.xml.xmlbeandefinitionreader loadbeandefinitions info: loading xml bean definitions class path resource [org/springframework/jdbc/support/sql-error-codes.xml] aug 24, 2016 12:03:09 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 org.springframework.batch.core.step.abstractstep execute severe: encountered error executing step importfilestep in job gcmpbatchfeedjob org.springframework.jdbc.uncategorizedsqlexception: preparedstatementcallback; uncategorized sqlexception sql [insert customers (cust_id,firstname,lastname,created_date) values (cust_id_seq.nextval, ?, ?, ?)]; sql state [null]; error code [17023]; unsupported feature; nested exception java.sql.sqlexception: unsupported feature @ org.springframework.jdbc.support.abstractfallbacksqlexceptiontranslator.translate(abstractfallbacksqlexceptiontranslator.java:84) @ org.springframework.jdbc.support.abstractfallbacksqlexceptiontranslator.translate(abstractfallbacksqlexceptiontranslator.java:81) @ org.springframework.jdbc.support.abstractfallbacksqlexceptiontranslator.translate(abstractfallbacksqlexceptiontranslator.java:81) @ org.springframework.jdbc.core.jdbctemplate.execute(jdbctemplate.java:660) @ org.springframework.jdbc.core.jdbctemplate.update(jdbctemplate.java:943) @ org.springframework.jdbc.core.namedparam.namedparameterjdbctemplate.update(namedparameterjdbctemplate.java:344) @ com.comp.sbatch.writer.customitemwriter.write(customitemwriter.java:171) @ org.springframework.batch.core.step.item.simplechunkprocessor.writeitems(simplechunkprocessor.java:175) @ org.springframework.batch.core.step.item.simplechunkprocessor.dowrite(simplechunkprocessor.java:151) @ org.springframework.batch.core.step.item.simplechunkprocessor.write(simplechunkprocessor.java:274) @ org.springframework.batch.core.step.item.simplechunkprocessor.process(simplechunkprocessor.java:199) @ org.springframework.batch.core.step.item.chunkorientedtasklet.execute(chunkorientedtasklet.java:75) @ org.springframework.batch.core.step.tasklet.taskletstep$chunktransactioncallback.dointransaction(taskletstep.java:406) @ org.springframework.batch.core.step.tasklet.taskletstep$chunktransactioncallback.dointransaction(taskletstep.java:330) @ org.springframework.transaction.support.transactiontemplate.execute(transactiontemplate.java:133) @ org.springframework.batch.core.step.tasklet.taskletstep$2.doinchunkcontext(taskletstep.java:271) @ org.springframework.batch.core.scope.context.stepcontextrepeatcallback.doiniteration(stepcontextrepeatcallback.java:77) @ org.springframework.batch.repeat.support.repeattemplate.getnextresult(repeattemplate.java:368) @ org.springframework.batch.repeat.support.repeattemplate.executeinternal(repeattemplate.java:215) @ org.springframework.batch.repeat.support.repeattemplate.iterate(repeattemplate.java:144) @ org.springframework.batch.core.step.tasklet.taskletstep.doexecute(taskletstep.java:257) @ org.springframework.batch.core.step.abstractstep.execute(abstractstep.java:198) @ org.springframework.batch.core.job.simplestephandler.handlestep(simplestephandler.java:148) @ org.springframework.batch.core.job.flow.jobflowexecutor.executestep(jobflowexecutor.java:64) @ org.springframework.batch.core.job.flow.support.state.stepstate.handle(stepstate.java:67) @ org.springframework.batch.core.job.flow.support.simpleflow.resume(simpleflow.java:165) @ org.springframework.batch.core.job.flow.support.simpleflow.start(simpleflow.java:144) @ org.springframework.batch.core.job.flow.flowjob.doexecute(flowjob.java:134) @ org.springframework.batch.core.job.abstractjob.execute(abstractjob.java:304) @ org.springframework.batch.core.launch.support.simplejoblauncher$1.run(simplejoblauncher.java:135) @ org.springframework.core.task.synctaskexecutor.execute(synctaskexecutor.java:50) @ org.springframework.batch.core.launch.support.simplejoblauncher.run(simplejoblauncher.java:128) @ com.comp.sbatch.app.main(app.java:35) caused by: java.sql.sqlexception: unsupported feature @ oracle.jdbc.driver.databaseerror.throwsqlexception(databaseerror.java:125) @ oracle.jdbc.driver.databaseerror.throwsqlexception(databaseerror.java:162) @ oracle.jdbc.driver.databaseerror.throwsqlexception(databaseerror.java:227) @ oracle.jdbc.driver.databaseerror.throwunsupportedfeaturesqlexception(databaseerror.java:537) @ oracle.jdbc.driver.physicalconnection.preparestatement(physicalconnection.java:3094) @ org.springframework.jdbc.core.preparedstatementcreatorfactory$preparedstatementcreatorimpl.createpreparedstatement(preparedstatementcreatorfactory.java:233) @ org.springframework.jdbc.core.jdbctemplate.execute(jdbctemplate.java:638) ... 29 more
you need switch newer driver fits database version. in case, should ojdbc6.jar
(but not ojdbc7.jar
used oracle 12 , has issues oracle 11).
Comments
Post a Comment