У меня есть SQL-запрос, как показано ниже.
SELECT O_DEF,O_DATE,O_MOD from OBL_DEFINITVE WHERE OBL_DEFINITVE_ID =?
Коллекция идентификаторов передается этому запросу и запускается как пакетный запрос. Это выполняется за 10000
время для извлечения значений из базы данных. (Некоторые еще беспорядок)
public static Map getOBLDefinitionsAsMap(Collection oblIDs)
throws java.sql.SQLException
{
Map retVal = new HashMap();
if (oblIDs != null && (!oblIDs.isEmpty()))
{
BatchStatementObject stmt = new BatchStatementObject();
stmt.setSql(SELECT O_DEF,O_DATE,O_MOD from OBL_DEFINITVE WHERE OBL_DEFINITVE_ID=?);
stmt.setParameters(
PWMUtils.convertCollectionToSubLists(taskIDs, 1));
stmt.setResultsAsArray(true);
QueryResults rows = stmt.executeBatchSelect();
int rowSize = rows.size();
for (int i = 0; i < rowSize; i++)
{
QueryResults.Row aRow = (QueryResults.Row) rows.getRow(i);
CoblDefinition ctd = new CoblDefinition(aRow);
retVal.put(aRow.getLong(0), ctd);
}
}
return retVal;
Теперь мы определили, что если запрос изменяется на
добавить как
SELECT O_DEF,O_DATE,O_MOD from OBL_DEFINITVE WHERE OBL_DEFINITVE_ID in (???)
, чтобы мы могли уменьшить его до 1 запроса.
Проблема в том, что сервер MSSQL выдает исключение,
Prepared or callable statement has more than 2000 parameter
И были поражены здесь. Может ли кто-нибудь предоставить лучшую альтернативу этому