http://forum.springframework.org/vie...+sql+procedure
Follwing the way of the this post, I had have a try of the Stored procedure. My DB is also MS SQL . But I come up with an exception.
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]过程 'PocketSpring_Procedure' 需要参数 '@userid',但未提供该参数。(The chinese part said that -----
'PocketSpring_Procedure' needs argument '@userid', but this argument is not provided.
Procedure
Code:CREATE PROCEDURE [dbo].[PocketSpring_Procedure] @userid VARCHAR(20) AS BEGIN SELECT id from Book WHERE id = @userid END GO
Test Code
If I move the argument in the stored procedure.Every thing goes well. It will print such an info in the console.Code:package pocketexample.spring; import org.springframework.jdbc.core.RowCallbackHandler; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.object.StoredProcedure; import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class PocketSpring_StoredProcedure { public static void main(String[] args) { PocketSpring_StoredProcedure t = new PocketSpring_StoredProcedure(); t.test(); System.out.println("Done!"); } void test() { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); ds.setUrl("jdbc:microsoft:sqlserver://localhost;DatabaseName=voice;SelectMethod=cursor"); ds.setUsername("sa"); ds.setPassword(""); PocketStoredProcedure sproc = new PocketStoredProcedure(ds); Map res = sproc.execute(); printMap(res); } private class PocketStoredProcedure extends StoredProcedure { public final String SQL = "dbo.PocketSpring_Procedure"; public PocketStoredProcedure(DataSource ds) { setDataSource(ds); setFunction(true); setSql(SQL); declareParameter(new SqlReturnResultSet("rs", new RowCallbackHandlerImpl())); declareParameter(new SqlParameter("userid", Types.VARCHAR)); compile(); } private class RowCallbackHandlerImpl implements RowCallbackHandler { public void processRow(ResultSet rs) throws SQLException { // count++; } } public Map execute() { Map in = new HashMap(); in.put("userid", "111111"); Map out = execute(in); return out; } } private static void printMap(Map r) { Iterator i = r.entrySet().iterator(); while (i.hasNext()) { System.out.println((String) i.next().toString()); } } }
"rs=ResultSet returned from stored procedure was processed."
How to call a stored procedure that with in/out parameters?
Thx in advance.


Reply With Quote