我的笔记本电脑上安装了Windows 7,其中有VMware Workstation和Oracle Linux 5.5。Linux上有Oracle 11g r2数据库,我需要使用NAT通过JDBC从主机(Win7)建立到客户机系统(Linux)上的数据库的连接。因此,我在Windows上运行此java代码:
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con;
try{
con = DriverManager.getConnection("jdbc:oracle:thin:@172.68.0.1:1521:orcl", "system","oracle");
} catch (SQLException e) {
e.printStackTrace();
}
}
我得到了这个异常:
java.sql.SQLRecoverableException: I/O Exception: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:428)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at OracleTest.main(OracleTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at oracle.net.ns.Packet.receive(Packet.java:283)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:287)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1054)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)
... 12 more
在Windows上,我将ipv4地址172.68.0.1分配给VMware Network Adapter VMnet8。以下是我在VMWare和Linux下的虚拟网络编辑器设置的图片:
http://i.cubeupload.com/vAen5q.jpg在Linux上我也有:
listener.ora:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.68.0.1)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
以及。奥拉:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.68.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
所以我需要找出问题是什么以及如何解决它。请帮助。
虽然晚了,但我找到了解决办法。
- 在Oracle VM VirtualBox管理器中,你必须进入全局工具,然后创建一个新的适配器
- 它自动给出一个IPv4地址,你可以用这个地址连接,但首先你必须改变你的虚拟机的设置,
- 选择你的虚拟机,例如Windows 10,然后按Settings,现在选择Network,然后在Attached to你必须选择Host-only Adapter,在名称中选择你创建的适配器,然后按Ok。
- 运行虚拟机。
-
在Java中你可以这样写:
connection.setUrl (" jdbc: oracle:薄:@IPv4Address: 1521: xe");
connection.setUser("示例");
connection.setPassword("通过");
当您完成所有步骤后,您可以从主机连接到虚拟机中的数据库。