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

    How to use spring simplejdbctemplate to call stored procedures

    jrequioma

      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;
      
      @Name("testspcall")
      public class Testspcall implements Serializable
      {
      
         @In("#{jdbcTemplate}")
              private transient static SimpleJdbcTemplate template;
      
      @SuppressWarnings("unchecked")
      public static BigDecimal calcDistance(final String zipcode, final BigDecimal lat, final BigDecimal lon) 
      {
              ConnectionCallback connectionCallBack = new ConnectionCallback() {
                      @Override
                      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);
                          statement.execute();
                          result = statement.getBigDecimal(4);
                          return result;
                                      }
      
              };
      
      BigDecimal result = (BigDecimal) template.execute(connectionCallBack);
      return result;               
      }