Вызываемый оператор Jdbc Ms SQL Driver 3.0 с использованием параметров по умолчанию - PullRequest
2 голосов
/ 20 октября 2011

Каков наилучший способ повторного использования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...