【问题标题】:port number of database produce error message数据库端口号产生错误信息
【发布时间】:2018-03-24 16:18:36
【问题描述】:

我正在编写一个简单的 java 程序(Jcreator 作为我的 IDE)来连接 Oracle 数据库(使用 SQL Plus / Oracle 10g)。我首先下载了jar文件并将其复制到oracle目录的bin目录中。然后,我将 jar 文件添加到我的 JDK 并编写了以下代码:

 Class.forName("oracle.jdbc.driver.OracleDriver");  
 Connection con=DriverManager.getConnection(  
 "jdbc:oracle:thin:@localhost:1521:amani","system","a123");    
 Statement stmt=con.createStatement();    
 ResultSet rs=stmt.executeQuery("select * from emp");  
while(rs.next())  
System.out.println(rs.getInt(1)+" - "+ rs.getString(2)+" -  "+rs.getInt(3)+"\n"); 

问题是当我使用默认端口号 1521 时,我没有得到任何结果,也没有出现错误消息。 我知道我应该使用自己的数据库端口号 1158,但后来我得到了

   java.sql.SQLException: Io exception: Bad packet type

我做错了什么,有人可以帮忙吗?

【问题讨论】:

    标签: jdbc oracle10g database-connection relational-database resultset


    【解决方案1】:

    我不了解 Java,以下内容可能是无关紧要的废话,如果是这种情况,我深表歉意。

    不管怎样,很快:1521 is most probably the port you should use (not 1158). Credentials you provided (username = system, password = a123) are wrong; use username = scott, password = tiger instead


    上述语句的更长版本:您应该有权访问数据库;看到您的代码,它已安装在您自己的计算机上。它是否已启动并正在运行,即您可以通过 SQL*Plus 连接到它吗?

    说你是

    应该使用我自己的数据库端口号 1158

    好吧,我对此表示怀疑。如果您默认安装了所有东西,那么您的数据库端口号是 1521,而 1158 是为 OEM(Oracle 企业管理器数据库控制台)保留的,所以我不认为 1158 是您应该使用的。见Managing Oracle Database Port Numbers

    此外,您的数据库名称真的是“amani”吗?就是这个

    "jdbc:oracle:thin:@localhost:1521:amani","system","a123"
                                      -----
                                      this
    

    建议。为了得到它的端口,使用命令提示符对其进行 TNSPING(我已经删除了输出中不必要的部分):我无法 tnsping amani(显然,我无权访问它)

    c:\Temp>tnsping amani
    
    TNS-03505: Failed to resolve name
    

    但我可以 tnsping 我自己的 XE 数据库:

    c:\Temp>tnsping xe
    
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = my-laptop)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
    OK (110 msec)
    

    看到了吗? “OK”,它的端口是 1521。在您的计算机上执行此操作以找到该信息。

    最后,用户名和密码:您使用了特殊之一,您的数据库中最强大的用户 SYSTEM(另一个是 SYS)。它不包含 EMP 表 - 它属于用户 SCOTT(其默认密码是 TIGER)。

    当您使用 Oracle 10g 时,如果我没记错的话,SCOTT 是预安装的架构之一,因此您应该能够连接到它。检查如下:在我的 XE 上,我以 SYS 身份连接:

    SQL> select username, account_status from dba_users;
    
    USERNAME                       ACCOUNT_STATUS
    ------------------------------ --------------------------------
    SYS                            OPEN
    SYSTEM                         OPEN
    ANONYMOUS                      OPEN
    SCOTT                          LOCKED
    HR                             OPEN
    <snip>
    
    SQL> alter user scott account unlock;
    
    User altered.
    
    SQL> alter user scott identified by tiger;
    
    User altered.
    
    SQL> connect scott/tiger@xe
    Connected.
    
    SQL> select count(*) From emp;
    
      COUNT(*)
    ----------
            12
    
    SQL>
    

    我希望你明白我做了什么。

    关于甲骨文的故事就这么多了;如果这没有帮助,我真的不知道该怎么做,以使您的 Java 端工作。希望其他人能够提供帮助。

    【讨论】:

    • 我第一次使用 hr 数据库,但我改变了它,因为我认为这是问题所在。在安装 SQL Plus 时,我用 a123 更改了默认密码,这就是我使用它的原因。是的,SQL Plus 在我的电脑上,我从安装过程后得到的信息中得到了端口号 1158:The Database Control URL is http://DESKTOP-Q6L1LKP:1158/em Enterprise Manager Database Control URL - (amani) : http://DESKTOP-Q6L1LKP:1158/em The iSQL*Plus URL is:http : //DESKTOP-Q6L1LKP:5560/isqlplus The iSQL*Plus DBA URL is : http://DESKTOP-Q6L1LKP:5560/isqlplus/dba
    • 很可能是我对您指出的连接信息做错了。所以,我真的很感激它,我希望它会起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多