Еще одно отличие, которое здесь не указано.
static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
for (T o : a) {
c.add(o); // correct
}
}
Но следующее приведет к ошибке времени компиляции.
static <T> void fromArrayToCollection(T[] a, Collection<?> c) {
for (T o : a) {
c.add(o); // compile time error
}
}
Я не думаю, что это возможно. Вот ссылка на обсуждение этой темы на сайте Oracle: http://forums.oracle.com/forums/thread.jspa?threadID=400492&start=15&tstart=0
Oracle представила ALTER SYSTEM CANCEL SQL
в 18c. Необходимо было бы добавить некоторый комментарий с UID к SQL и затем искать его что-то вроде этого
SELECT S.SID||','||S.SERIAL#
FROM GV$SESSION S, V$SQL Q
WHERE S.USERNAME IS NOT NULL
AND S.STATUS = 'ACTIVE'
AND S.SQL_ID IS NOT NULL
AND Q.SQL_ID = S.SQL_ID
and sql_text like '%{queryId}%'
И затем выполнить другую операцию от.NET ALTER SYSTEM CANCEL SQL 'SID, SERIAL'
Если вы используете ADO.NET и поставщик данных SQL, обратите внимание на метод SqlCommand.Cancel. Это то, что вы ищете. Однако он пытается отменить, и отмена может занять время. По сути, SQL Server должен решить, когда предоставить ваш запрос на отмену. Когда запрос отменяется, вы должны получить SqlException, указывающее, что операция была отменена пользователем. По-видимому, вы не хотите рассматривать это исключение как исключение и обрабатывать его особым образом, например, если SqlException вызвано отменой операции пользователем, просто проглотите его.
Я почти уверен, что это возможно - мы используем TOAD для Oracle, и это позволяет вам отменять длительные запросы, , как описано здесь . Я не знаю, как они это делают.
Вы можете заставить фоновый рабочий запускать фактический вызов базы данных в другом потоке, а затем периодически проверять, завершен ли вызов базы данных или нажата ли отмена, после чего вы можете убить поток базы данных. На самом деле это не поможет загрузке базы данных (поскольку ваш запрос был отправлен и все еще обрабатывается), но освобождает ваши локальные ресурсы, связанные с ним.
Я думаю, что лучшим решением кажется уничтожение сессий через таблицу мониторинга.
С Oracle вы можете сделать это, как говорит Burnsys
В Firebird 2.5 это будет выглядеть так же
Я надеюсь, что нечто подобное существует в Ms SQL
Если вы используете команду SQLCommand, вы можете попробовать вызвать ее метод Cancel .
А как насчет открытия нового подключения к базе данных, входа в систему как sysdba и отправки команды «ALTER SYSTEM KILL SESSION 'sid, serial #' IMMEDIATE» с указанием SID процесса, который вы хотите завершить.
Чтобы получить идентификатор сеанса: выберите sid из v $ mystat, где rownum = 1
Чтобы получить серийный номер: выберите sid, серийный номер из v $ session, где sid =: SID
http: // www .oracle-base.com / article / misc / KillingOracleSessions.php
РЕДАКТИРОВАТЬ: Идея WW, чтобы не входить в систему как sysdba здесь: http://forums.oracle.com/forums/thread.jspa?threadID=620578