Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决在Oracle11gJDBC7/14JDK1.7中从读取调用中得到的负1?_Java_Oracle_Jakarta Ee_Jdbc_Oracle11g - Fatal编程技术网

Java 如何解决在Oracle11gJDBC7/14JDK1.7中从读取调用中得到的负1?

Java 如何解决在Oracle11gJDBC7/14JDK1.7中从读取调用中得到的负1?,java,oracle,jakarta-ee,jdbc,oracle11g,Java,Oracle,Jakarta Ee,Jdbc,Oracle11g,我在1.7中使用netbeans和jdk 7 updt 9,下面是我的代码 public class jd { public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=Driv

我在1.7中使用netbeans和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)
运行:
线程“main”java.sql.SQLRecoverableException:IO错误:读取调用得到负1
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:715)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:385)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
位于java.sql.DriverManager.getConnection(DriverManager.java:571)
位于java.sql.DriverManager.getConnection(DriverManager.java:215)
在jd.main(jd.java:22)
原因:oracle.net.ns.NetException:从读取调用中得到负1
位于oracle.net.ns.Packet.receive(Packet.java:314)
位于oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:153)
位于oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
位于oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 还有7个
Java结果:1
生成成功(总时间:0秒)

oracle.jdbc.driver.OracleDriver已弃用。用
oracle.jdbc.OracleDriver

见: 和

我认为错误在该行的端口号1158中:

    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1158:ORCL","system", "system");
通常使用端口1521连接到Oracle数据库。尝试将1158替换为1521

您的数据库可能正在端口1158上运行Enterprise Manager。这是一个您可以访问的web应用程序,通常通过导航到。Oracle数据库本身通常会侦听端口1521

使用JDBC时,您需要直接连接到数据库,而不是某些web应用程序。OracleJDBC驱动程序理解它用于与数据库通信的专有二进制协议,但不理解它从Enterprise Manager web应用程序返回的HTTP。因此会出现一个奇怪的网络错误。如果尝试将JDBC驱动程序连接到其他非Oracle数据库的对象,则可能会出现类似的随机网络错误。

请尝试以下代码:

OracleDataSource ods = new OracleDataSource();    
ods.setUser(DB_USER));    
ods.setPassword(DB_PASSWORD);    
ods.setURL(jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename))));    
// New AutoClosable syntax applicable to connection. This syntax will    
// close the connection automatically    
try (OracleConnection connection = (OracleConnection) (ods.getConnection())) {      
 // Statement and ResultSet are AutoClosable by this syntax   
 try (Statement statement = connection.createStatement()) {      
    try (ResultSet resultSet = statement.executeQuery("select sysdate from dual")) {        
      while (resultSet.next())          
           System.out.print("Today's Date is: " + resultSet.getString(1));

    }   
  }
}

DriverManager在尝试获取具有无效URL的连接时抛出此错误。确保您的URL有效。 结帐事项:

  • 端口:Oracle db在1521上运行。(注意:不要将自己与oracle的webport混淆,它可以是URL 1158中的任何其他端口)
  • 数据库名称:从Oracle Web UI获取数据库名称:(主页->管理->关于数据库->设置)
  • URL格式:
    “jdbc:oracle:thin:@localhost:1521:YourDbName”

  • JDBC驱动程序的版本和您的服务器的版本是什么?JDBC 6/14.0/14.01/7.0 oracle 11g 11.0.2没有任何功能,我尝试了所有功能,使用db服务无法连接,oracle精简,使用相同的设置,mysql连接器驱动程序连接成功,但oracle sql 11g无法工作。没有任何功能,我尝试了所有功能,它无法使用db服务、oracle精简、使用相同的设置进行连接,mysql连接器驱动程序连接成功,但oracle sql 11g不起作用。“什么都不起作用,我都试过了”。显然你没有,就好像你已经尝试了所有你与Oracle的连接现在可以工作的方法一样。那么,当你按照我的建议更改端口号时发生了什么?您收到了什么错误消息?你还尝试过什么,以及每种情况下的结果是什么(请在每种情况下提供完整的错误消息,不要有“它不起作用”的模糊性)。根据您尝试过的每件事的细节以及每种情况下的结果编辑您的问题。