0 Replies Latest reply on Nov 25, 2010 8:34 PM by jrequioma jrequioma

    How to use spring simplejdbctemplate to call stored procedures

    jrequioma jrequioma Newbie

      Hi, I am new to SEAM and i got a requirement to execute an oracle sproc from a seam-gen'ed Form which i replaced the code from one of the discussions to try out for myself. But there are some error messages displayed in my eclipse IDE saying:

      The method execute(ConnectionCallback) is undefined for the type SimpleJdbcTemplate for this line:

      BigDecimal result = (BigDecimal) template.execute(connectionCallBack);

      What am i missing here? So far i don't see a consolidated listing of the sample code. So i just tried to patch up here and there (remove throws exception, etc.) as per advice. Did i patch correctly? Below is my action class:

      package com.mydomain.testapp.action;
      import java.io.Serializable;
      import java.sql.CallableStatement;
      import java.sql.Connection;
      import java.sql.Types;
      import java.math.BigDecimal;
      import org.hibernate.sql.Template;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Name;
      import org.springframework.jdbc.core.ConnectionCallback;
      import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
      public class Testspcall implements Serializable
              private transient static SimpleJdbcTemplate template;
      public static BigDecimal calcDistance(final String zipcode, final BigDecimal lat, final BigDecimal lon) 
              ConnectionCallback connectionCallBack = new ConnectionCallback() {
                      public Object doInConnection(Connection conexion_db)
                                              BigDecimal result;
                                              CallableStatement statement = conexion_db.prepareCall("{call CalcDistance(?, ?, ?, ?)}");
                          statement.setString(1, zipcode);
                          statement.setBigDecimal(2, lat);
                          statement.setBigDecimal(3, lon);
                          statement.registerOutParameter(4, Types.DOUBLE);
                          result = statement.getBigDecimal(4);
                          return result;
      BigDecimal result = (BigDecimal) template.execute(connectionCallBack);
      return result;