我有一個SQL查詢,如下所示。什麼是BatchStatement執行從數據庫中獲取值的最佳選擇(MSSQL 2008)
SELECT O_DEF,O_DATE,O_MOD from OBL_DEFINITVE WHERE OBL_DEFINITVE_ID =?
將一個Ids集合傳遞給此查詢並作爲批處理查詢運行。這會執行10000周 時間從數據庫retriveing值。(是別人亂)
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
在這裏被擊中。有人可以提供任何更好的替代
好主意..可以用上面的代碼詳細說明一下。謝謝 – GustyWind