请通过步骤给我一个确切的解决方案。
我正在使用netbeans和1.7的jdk 7 updt 9,以下是我的代码。
public class jd {
public static void main(String[] args) throws ClassNotFoundException, SQLException
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1158:ORCL","system", "system");
System.out.println("Connection successful");
//Statement s=con.createStatement();
}
}
输出是
run:
Exception in thread "main" java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at jd.main(jd.java:22)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.Packet.receive(Packet.java:314)
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:153)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 7 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
最佳答案
我认为该行中的端口号为1158,是错误的:
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1158:ORCL","system", "system");
通常,您使用端口1521连接到Oracle数据库。尝试用1521替换1158。
您的数据库可能正在端口1158上运行企业管理器。这是您经常通过导航到https://localhost:1158/em来访问的Web应用程序。 Oracle数据库本身通常将在端口1521上进行侦听。
使用JDBC时,您需要直接连接到数据库,而不是某些Web应用程序。 Oracle JDBC驱动程序了解它用于与数据库进行通信的专有二进制协议,但不了解它从企业管理器Web应用程序获取的HTTP。因此,您会收到一个奇怪的网络错误。如果尝试将JDBC驱动程序连接到其他非Oracle数据库,则可能会遇到类似的随机网络错误。