数据库的端口号产生错误消息

时间:2018-03-24 16:18:37

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

我正在编写一个简单的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

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

1 个答案:

答案 0 :(得分:0)

我不知道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 (显然,我无法访问它)< / p>

c:\Temp>tnsping amani

TNS-03505: Failed to resolve name

但我可以使用自己的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.在您的计算机上执行此操作以查找该信息。

最后,用户名和密码:您使用了 special 之一,数据库中最强大的用户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>

我希望你明白我的所作所为。

关于Oracle的一部分故事;如果没有帮助,我真的不知道该怎么做,以便让你的Java工作。希望其他人能够提供帮助。