重用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 = HashMap
有name-value
对。 name
为param 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