Oracle даст Вам ошибки об открытых курсорах в этом случае.
Согласно: http://java.sun.com/javase/6/docs/api/java/sql/Statement.html
похоже, что многократное использование оператора закроет любые открытые наборы результатов, и закрытие оператора закроет любые наборы результатов, но я не вижу, что что-либо о закрытии соединения закроет любой из ресурсов, которые это создало.
Все те детали оставляют поставщику драйвера JDBC.
Его всегда самый безопасный закрыть все явно. Мы записали util класс, который обертывает все с попыткой {xxx} выгода (Throwable {} так, чтобы можно было просто назвать Utils.close (RS) и Utils.close(stmt), и т.д. не имея необходимость волноваться по поводу исключений, что закрываются, сканирование, предположительно, бросают.
Вы можете увидеть различные шаги проверки в действии, если запустите fuslogvw.exe (из .NET SDK) и включите ведение журнала всех привязок к диску. Вы сможете увидеть различные пути, которые .NET CLR использует для разрешения ссылок на сборки. Однако практическое правило - сначала попробовать глобальный кэш сборок, а затем проверить локальный каталог вместе с множеством других альтернативных путей.
Технически, в DLL нет пространств имен.
На уровне CLR, вообще нет пространств имен, только полные имена классов. Имя класса CLR может состоять из произвольно длинной последовательности любых символов Юникода - например, @ # $%
было бы идеальным именем класса с точки зрения CLR.
Итак, по соглашению (в частности, CLS), имена классов ограничиваются определенными символами Unicode (буквенно-цифровыми и _
, а также множеством других экзотических категорий Unicode - см. спецификацию для получения дополнительной информации) и точкой , а точка используется для обозначения пространств имен. Это чисто соглашение между компиляторами (и другими инструментами).
Таким образом, всякий раз, когда сборка ссылается на какой-либо тип по какой-либо причине, она просто использует его полное имя CLR, например System.String
. Но это еще не все - на самом деле он использует полностью определенное имя, которое также включает сборку. Вы можете увидеть их, если посмотрите на вывод ildasm
- они выглядят примерно как [mscorlib] System.String
, поэтому среда выполнения знает, где искать.
Другими словами, CLR действительно видит сборку mscorlib.dll, имеющую класс System.String
, и сборку B.exe, ссылающуюся на этот класс как [mscorlib] System.String
. Ваш оператор using
сам по себе не генерирует никакого кода в выходной DLL / EXE; он там только для того, чтобы вам не приходилось постоянно писать System.String
.
Задача компилятора - перевести ваш код, говорящий String
, в рамках с использованием оператора System;
в проекте, который ссылается на mscorlib.dll
, на [mscorlib] System.String
. Это' все делается во время компиляции. Единственное, что CLR делает во время выполнения, - это разрешает mscorlib
, чтобы найти фактический mscorlib.dll на диске (и другой ответ объясняет, как именно это происходит).
Правила расположения сборки описаны в http://msdn.microsoft .com / en-us / library / yx7xezcf.aspx
Имена сборок и пространств имен не связаны между собой.
Скомпилированная сборка ссылается на другие сборки, содержащие их имя .
Когда сборка загружена, ее ссылки загружаются путем поиска имени, как описано здесь . Наиболее распространенное расположение сборок - это Глобальный кэш сборок машины и базовый каталог приложения.
После загрузки сборки и всех ее ссылок (и ссылок на ссылки и т. Д.) среда выполнения загружает требуемые типы из сборок.
Например, если вы используете тип String
, как в
using System;
...
String x = "Hello World";
, компилятор C # ищет String
и разрешает его в Тип System.String
в сборке mscorlib
,