Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
Синтаксис названия службы в тонком стиле
Названия служб тонкого стиля поддерживаются только драйвером JDBC Thin. Синтаксис:
@ // host_name: port_number / service_name
Например:
jdbc: oracle: thin: scott / tiger @ // myhost: 1521 / myservicename
blockquote>Поэтому я бы попытался:
jdbc: oracle: thin: @ // oracle.hostserver2.mydomain.ca:1522/ABCD
Кроме того, в ответе Роберта Большого дома вы также можете указать имя TNS в URL-адрес JDBC, как показано ниже:
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))
Итак, есть два простых способа сделать эту работу. Решение, размещенное Bert F, отлично работает, если вам не нужно предоставлять какие-либо другие специальные свойства соединения с Oracle. Формат для этого:
jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME
Однако, если вам нужно указать другие свойства соединения с Oracle, вам нужно использовать длинный стиль TNSNAMES. Я должен был сделать это недавно, чтобы включить общие соединения Oracle (где сервер делает свой собственный пул соединений). Формат TNS:
jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))
Если вы знакомы с форматом файлов Oracle TNSNAMES, это должно выглядеть вам знакомым. Если нет, то просто Google это для деталей.
Попробуйте следующее: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD
Изменить: за комментарий ниже это действительно правильно: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
(обратите внимание на //
)
При использовании dag
вместо thin
синтаксис, указывающий на имя службы, работал для меня. Вышеупомянутые решения jdbc:thin
не работали.
jdbc:dag:oracle://HOSTNAME:1521;ServiceName=SERVICE_NAME
Если вы используете eclipse для подключения oracle без SID. Есть два драйвера для выбора, т. Е. Драйвер Oracle thin, а другой - другой драйвер. Выберите другие драйверы и введите имя службы в столбце базы данных. Теперь вы можете напрямую подключиться, используя имя службы без SID.
Вы также можете указать имя TNS в URL-адресе JDBC, как показано ниже
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))
Это обсуждение помогло мне решить проблему, с которой я боролся в течение нескольких дней. Я огляделся по всему Интернету, пока не нашел ответ от Джима Тхафа 18 мая в 15:17. С этим ответом мне удалось подключиться. Теперь я хочу вернуть и помочь другим с полным примером. Здесь:
import java.sql.*;
public class MyDBConnect {
public static void main(String[] args) throws SQLException {
try {
String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=whatEverYourHostNameIs)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yourServiceName)))";
String strUserID = "yourUserId";
String strPassword = "yourPassword";
Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword);
Statement sqlStatement = myConnection.createStatement();
String readRecordSQL = "select * from sa_work_order where WORK_ORDER_NO = '1503090' ";
ResultSet myResultSet = sqlStatement.executeQuery(readRecordSQL);
while (myResultSet.next()) {
System.out.println("Record values: " + myResultSet.getString("WORK_ORDER_NO"));
}
myResultSet.close();
myConnection.close();
} catch (Exception e) {
System.out.println(e);
}
}
}