日期:2014-05-17  浏览次数:20833 次

运行jdbc应用时并用cme连接oracle,端口冲突?
有相当长的一段时间没用oracle了,这两天兴趣来潮,安装了oracle11g,打开eclipse,写了一个jdbc的小应用,也不算什么应用,就是往指定的表里面插入大量数据而已,同时想在数据插入的时候,在cmd窗口,查询已插入的记录数。在运行前,先打开cmd窗口连接上oracle,接着启动应用,在第一个insert语句那里,就停止不动了,反复测试几次,发现还是老样子,debug一下,inspect发现pst.execute()有一个Exception,如下所示:
Java code

"pst.execute()"
com.sun.jdi.VMDisconnectedException:GotIOException from Virtual Machine occurred invoking method.



后来发现并不是停止不动,而是处于阻塞状态。搜索了一个该异常,有朋友说是“端口冲突”,奇怪了,但这时把cmd的连接窗口退出来,应用就能够继续运行(看来真是端口冲突),接着再用cmd连接oracle,应用就彻底抛出异常,停止不动了。
Java code

ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
localhost:1521:orcl
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:280)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:319)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:344)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:148)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:545)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:221)
    at dbconnection.oracle.OracleConnection.getConnection(OracleConnection.java:36)
    at memcachedtest.jd.RoleDao.insert(RoleDao.java:19)
    at memcachedtest.jd.RoleService.insert(RoleService.java:10)
    at memcachedtest.jd.RoleService.main(RoleService.java:59)
Exception in thread "main" java.lang.NullPointerException
    at memcachedtest.jd.RoleDao.insert(RoleDao.java:21)
    at memcachedtest.jd.RoleService.insert(RoleService.java:10)
    at memcachedtest.jd.RoleService.main(RoleService.java:59)



把oracle默认连接数由150改为1000之后,还是这种情况,只要cmd连接着oracle,该jdbc应用就运行不正常。有点奇怪了,以前用oracle的时候,都是一边用应用连接着oracle,同时用cmd或plus/sql连接(还开几个连接呢),并没有出现过这种所谓端口冲突的情况啊,不解,希望各位解释一下,谢谢了。

------解决方案--------------------
你用cmd连接完数据库之后用一下的命令查看一下端口1521被占用了吗。
如果被占用,再调用,就会出现你说的这种情况啊
netstat -a
------解决方案--------------------
你的整个过程说的不是很清楚,

估计是INSERT后没有COMMIT,表被锁了,
当程序终止后,释放锁
------解决方案--------------------
探讨

没人响应了,看来要不满意结贴了?