Announcement Announcement Module
Collapse
No announcement yet.
problem with jdbcCursorItemReader Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • problem with jdbcCursorItemReader

    Hi all,

    I want to read data from a DataBase using JdbcCursorItemReader, but when I execute the jUnit test i get the following error (it seems configuration takes database from examples):

    org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException:



    Right, the files that contain my java proyect are as follows:

    1)spring-batch-demo.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns="http://www.springframework.org/schema/p"
    xmlns:batch="http://www.springframework.org/schema/batch"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schem...-beans-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schem...ng-aop-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schem...ing-tx-2.0.xsd
    http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverM anagerDataSource">
    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDrive r"/>
    <property name="url" value="jdbc:sqlserver://10.90.33.7;DatabaseName=INT001"/>
    <property name="username" value="INTGENE"/>
    <property name="password" value="INTGENE"/>
    </bean>

    <!--
    El gestor de transacciones que se usará durante el procesamiento batch.
    -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSou rceTransactionManager" lazy-init="true">
    <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="jobRepository"
    class="org.springframework.batch.core.repository.s upport.JobRepositoryFactoryBean"
    p:databaseType="sqlserver"
    p:dataSource-ref="dataSource"
    p:transactionManager-ref="transactionManager"/>


    <bean id="jobLauncher" class="org.springframework.batch.core.launch.suppo rt.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
    </bean>



    <batch:job id="trabajoBatch">
    <batch:step id="imprimirPorConsola">
    <batch:tasklet>
    <batch:chunk reader="gestionesItemReader" writer="consolaItemWriter" commit-interval="5" />
    </batch:tasklet>
    </batch:step>
    </batch:job>


    <!--
    Lector de planteas. Esta reader de base de datos es una clase
    utilitaria provista por Spring Batch. Este bean ejecuta el query "sql"
    y recorrer las filas resultantes. Cada fila es transformada con el
    "mapper" asociado.
    En este caso se usa un mapper utilitario, que de acuerdo al alias
    indicado en cada columna del query lo asocia a un objeto Planeta.
    -->
    <bean id="gestionesItemReader" class="org.springframework.batch.item.database.Jdb cCursorItemReader">
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select * from GESTIONES"/>
    <property name="rowMapper">
    <bean id="gestionesMapper" class="org.springframework.jdbc.core.BeanPropertyR owMapper">
    <property name="mappedClass">
    <value type="java.lang.Class">src.com.Gestiones</value>
    </property>
    </bean>
    </property>
    </bean>


    <!--
    Esta es la clase encargada de escribir los resultados de la lectura
    del "itemReader". Cada elemento leido por el "planetaItemReader" es
    procesado por este "itemWriter".
    ConsolaItemWriter recibe entonces un Planeta y lo muestra por consola.
    -->
    <bean id="consolaItemWriter" class="src.com.ConsolaItemWriter"/>


    </beans>

    2)ConsolaItemWriter
    package src.com;

    import java.util.Collection;
    import java.util.List;
    import org.springframework.batch.item.ItemWriter;

    /**
    *
    * @author ldeseta
    */
    public class ConsolaItemWriter implements ItemWriter {

    public void write(List item) throws Exception {
    Collection<Gestiones> col = (Collection<Gestiones>) item;
    for (final Gestiones gestion : col) {
    System.out.println(gestion.getInscripcion());
    }
    }

    }

    3)Gestiones.java
    // Generated 10-mar-2010 16:15:47 by Hibernate Tools 3.2.0.b9

    /**
    * Gestiones generated by hbm2java
    */
    public class Gestiones {

    private Date fechahora;

    private Long inscripcion;

    private Short anualidad;

    private String entidad;

    private String sucursal;

    private String dc;

    private String cuenta;

    private String titularcuenta;

    private String cambioenvio;

    private String titularenvio;

    private String direccionenvio;

    private String localidadenvio;

    private String provinciaenvio;

    private String cp;

    private String telefono1;

    private String telefono2;

    private String correoelectronico;

    private byte estado;

    private Date fechaestado;

    private String tipogestion;

    private String tipoimpuesto;

    private String useragent;

    private boolean erroneo;

    public Short getAnualidad() {
    return anualidad;
    }

    public void setAnualidad(Short anualidad) {
    this.anualidad = anualidad;
    }

    public String getCambioenvio() {
    return cambioenvio;
    }

    public void setCambioenvio(String cambioenvio) {
    this.cambioenvio = cambioenvio;
    }

    public String getCorreoelectronico() {
    return correoelectronico;
    }

    public void setCorreoelectronico(String correoelectronico) {
    this.correoelectronico = correoelectronico;
    }

    public String getCp() {
    return cp;
    }

    public void setCp(String cp) {
    this.cp = cp;
    }

    public String getCuenta() {
    return cuenta;
    }

    public void setCuenta(String cuenta) {
    this.cuenta = cuenta;
    }

    public String getDc() {
    return dc;
    }

    public void setDc(String dc) {
    this.dc = dc;
    }

    public String getDireccionenvio() {
    return direccionenvio;
    }

    public void setDireccionenvio(String direccionenvio) {
    this.direccionenvio = direccionenvio;
    }

    public String getEntidad() {
    return entidad;
    }

    public void setEntidad(String entidad) {
    this.entidad = entidad;
    }

    public boolean isErroneo() {
    return erroneo;
    }

    public void setErroneo(boolean erroneo) {
    this.erroneo = erroneo;
    }

    public byte getEstado() {
    return estado;
    }

    public void setEstado(byte estado) {
    this.estado = estado;
    }

    public Date getFechaestado() {
    return fechaestado;
    }

    public void setFechaestado(Date fechaestado) {
    this.fechaestado = fechaestado;
    }

    public String getLocalidadenvio() {
    return localidadenvio;
    }

    public void setLocalidadenvio(String localidadenvio) {
    this.localidadenvio = localidadenvio;
    }

    public String getProvinciaenvio() {
    return provinciaenvio;
    }

    public void setProvinciaenvio(String provinciaenvio) {
    this.provinciaenvio = provinciaenvio;
    }

    public String getSucursal() {
    return sucursal;
    }

    public void setSucursal(String sucursal) {
    this.sucursal = sucursal;
    }

    public String getTelefono1() {
    return telefono1;
    }

    public void setTelefono1(String telefono1) {
    this.telefono1 = telefono1;
    }

    public String getTelefono2() {
    return telefono2;
    }

    public void setTelefono2(String telefono2) {
    this.telefono2 = telefono2;
    }

    public String getTipogestion() {
    return tipogestion;
    }

    public void setTipogestion(String tipogestion) {
    this.tipogestion = tipogestion;
    }

    public String getTipoimpuesto() {
    return tipoimpuesto;
    }

    public void setTipoimpuesto(String tipoimpuesto) {
    this.tipoimpuesto = tipoimpuesto;
    }

    public String getTitularcuenta() {
    return titularcuenta;
    }

    public void setTitularcuenta(String titularcuenta) {
    this.titularcuenta = titularcuenta;
    }

    public String getTitularenvio() {
    return titularenvio;
    }

    public void setTitularenvio(String titularenvio) {
    this.titularenvio = titularenvio;
    }

    public String getUseragent() {
    return useragent;
    }

    public void setUseragent(String useragent) {
    this.useragent = useragent;
    }

    public Date getFechahora() {
    return fechahora;
    }

    public void setFechahora(Date fechahora) {
    this.fechahora = fechahora;
    }

    public Long getInscripcion() {
    return inscripcion;
    }

    public void setInscripcion(Long inscripcion) {
    this.inscripcion = inscripcion;
    }
    }

    4)TablaHaciaConsolaTest
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {
    "classpath:src/com/spring-batch-demo.xml"
    })
    public class TablaHaciaConsolaTest {

    /** Este objeto es el encargado de lanzar una tarea */
    @Autowired
    private SimpleJobLauncher launcher;

    /** La tarea a ejecutar. */
    @Autowired
    private Job job;

    @Test
    public void iniciarJob() throws Exception {
    JobParametersBuilder builder = new JobParametersBuilder();
    builder.addDate("Ejecucion", new Date());
    builder.addString("jobName", "Mostrar tabla por consola");
    JobParameters parameters = builder.toJobParameters();

    launcher.run(job, parameters);
    }
    }

    Could anyone help me???

    Thanks in advance.

  • #2
    Hi, I've just solved. I didn't create a SpringBatch database, which is necesary to execute jdbcCursorItemReader.

    Thanks

    Comment

    Working...
    X