使用默认参数的Jdbc Ms SQL Driver 3.0可调用语句

时间:2011-10-20 16:39:10

标签: java sql-server-2005 jdbc

重用CallableStatement的最佳方式是什么? 我想以不同的方式使用相同的msp_updateOption并使其成为可重用的代码。 此外,CallableStatement应将输入作为参数类型而不是索引。

private static final String UPDATE_INFO = "{call msp_updateOption (?,?,?,?,?,?,?,?,?,?)}";
private static final String UPDATE__INFO_NO_COMMENT = "{call msp_updaterOption (?,?,?,?,?,?,?,?,?)}";
private static final String UPDATE_INFO_NO_COMMENT_NO_G = "{call msp_updateOption (?,?,?,?,?,?,?,?)}";

ALTER procedure [dbo].[msp_UpdateOption]
@pnbr int,
@pB datetime=null,
@stopFlag int,
@emailFlag int,
@name varchar(100),
@pName varchar(100),
@pID varchar(100),
@gNbr int=null,
@commentTypeID int=null,
@updateTypeID int

我尝试实现类似这样的内容:其中map = HashMapname-value对。 nameparam name

Set set = map.keySet();
Iterator itr = set.iterator(); // iterate through HashMap values
// iterator
try {
    while (itr.hasNext()) {
        String paramType = (String) (itr.next());
        cstmt.setObject(paramType,map.get(paramType));
        cstmt.execute();
    } 

执行此操作时,它总是超出为sp定义的索引和错误输出。 这个实现是否有效。它适用于MS SQL的旧版JDBC驱动程序 这是我得到的错误。

 com.microsoft.sqlserver.jdbc.SQLServerException: The index 10 is out of range.
[10/20/11 18:56:25:082 CDT] 0000002d SystemOut     O    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
[10/20/11 18:56:25:082 CDT] 0000002d SystemOut     O    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:700)
[10/20/11 18:56:25:082 CDT] 0000002d SystemOut     O    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setObjectNoType(SQLServerPreparedStatement.java:896)
[10/20/11 18:56:25:082 CDT] 0000002d SystemOut     O    at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.setObject(SQLServerCallableStatement.java:1379)
[10/20/11 18:56:25:082 CDT] 0000002d SystemOut     O    at com.ibm.ws.rsadapter.jdbc.WSJdbcCallableStatement.setObject(WSJdbcCallableStatem

0 个答案:

没有答案