Каков наилучший способ повторного использования 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 и ошибок.Будет ли эта реализация работать.Это работало с более старой версией драйвера JDBC MS SQL. Это ошибка, которую я получаю.
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