yz3162611
2009-04-14 10:28 阅读 1.3k
已采纳

JDBC连接oracle 出问题:Listener refused the connection!

我现在在做一个小项目,环境是MYECLIPS6+TOMCAT5+ORACLE10g
当我在页面浏览时,总出现间接性的数据库连接错误,郁闷了很久。。

下面是MYECLIPSE中报的错误:
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
192.168.133.250:1521:oracle

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:279)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:318)
at oracle.jdbc.driver.PhysicalConnection. (PhysicalConnection.java:343)
at oracle.jdbc.driver.T4CConnection. (T4CConnection.java:147)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:545)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.zjsoft.zjsj.util.Database.getConnection(Database.java:59)
at org.zjsoft.zjsj.util.Database.getPreparedStatement(Database.java:79)
at org.zjsoft.zjsj.dao.impl.DepartmentDAOImpl.getDepartmentByID(DepartmentDAOImpl.java:41)
at org.zjsoft.zjsj.dao.impl.ApplyTypeDAOImpl.setData(ApplyTypeDAOImpl.java:104)
at org.zjsoft.zjsj.dao.impl.ApplyTypeDAOImpl.getApplyTypeByID(ApplyTypeDAOImpl.java:25)
at org.zjsoft.zjsj.dao.impl.ApplyDAOImpl.setDataList(ApplyDAOImpl.java:151)
at org.zjsoft.zjsj.dao.impl.ApplyDAOImpl.listApplyByStatus(ApplyDAOImpl.java:36)
at org.zjsoft.zjsj.servlet.accepter.AcceptStatusServlet.doPost(AcceptStatusServlet.java:42)
at org.zjsoft.zjsj.servlet.accepter.AcceptStatusServlet.doGet(AcceptStatusServlet.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.zjsoft.zjsj.filter.EncodingFilter.doFilter(EncodingFilter.java:25)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Unknown Source)

下面是我浏览器上显示的错误:
java.lang.NullPointerException
org.zjsoft.zjsj.util.Database.getPreparedStatement(Database.java:81)
org.zjsoft.zjsj.dao.impl.DepartmentDAOImpl.getDepartmentByID(DepartmentDAOImpl.java:41)
org.zjsoft.zjsj.dao.impl.ApplyTypeDAOImpl.setData(ApplyTypeDAOImpl.java:104)
org.zjsoft.zjsj.dao.impl.ApplyTypeDAOImpl.getApplyTypeByID(ApplyTypeDAOImpl.java:25)
org.zjsoft.zjsj.dao.impl.ApplyDAOImpl.setDataList(ApplyDAOImpl.java:151)
org.zjsoft.zjsj.dao.impl.ApplyDAOImpl.listApplyByStatus(ApplyDAOImpl.java:36)
org.zjsoft.zjsj.servlet.accepter.AcceptStatusServlet.doPost(AcceptStatusServlet.java:42)
org.zjsoft.zjsj.servlet.accepter.AcceptStatusServlet.doGet(AcceptStatusServlet.java:24)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.zjsoft.zjsj.filter.EncodingFilter.doFilter(EncodingFilter.java:25)

org.zjsoft.zjsj.util.Database.getPreparedStatement(Database.java:81)代码如下:
private Connection getConnection() {
Connection connection = null;
try {
Class.forName(DBDRIVER); // 加载数据库驱动类
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
connection = DriverManager.getConnection(DBURL, USER, PASSWORD); } catch (SQLException e) {
e.printStackTrace();
}
return connection;
}

[b]问题补充:[/b]
项目都做了这么久了 不可能再改数据库了 修改连接试了下

连接数已经改为300了 但还是出现那个错误啊

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • 已采纳
    SWEN00 qq_123 2009-04-14 10:45

    可能是数据库上当前的连接数目已经超过了它能够处理的最大值.

    selectcount(*)fromv$process--当前的连接数
    selectvaluefromv$parameterwherename='processes'--数据库允许的最大连接数

    修改最大连接数:
    altersystemsetprocesses=300scope=spfile;

    重启数据库:
    shutdownimmediate;
    startup;

    --查看当前有哪些用户正在使用数据
    SELECTosuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
    fromv$session a, v$sqlarea b
    wherea.sql_address=b.addressorderbycpu_time/executionsdesc;

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 2009-04-14 11:04

    数据库连接的用户名密码可能不能访问对应 的那个表吧

    点赞 评论 复制链接分享
  • weixin_42297497 weixin_42297497 2009-04-14 11:37

    必须确保你的数据库最大连接数支持130,这是并发问题,解决方案,最好写个连接池,就可以解决了。

    点赞 评论 复制链接分享
  • iampurse iampurse 2009-04-14 11:40

    1楼正解,如果是小项目的话,没有必要用ora

    我甚至觉得就算是大项目也没有必要用ora,

    ora只是用来显示有钱的,mysql用好了,不会比ora差。

    点赞 评论 复制链接分享
  • zkl_1987 zkl_1987 2009-04-14 14:50

    同意一楼的
    ora的对大数据量的处理肯定是比mysql强的
    ora不是用来显示有钱的
    那是根据项目需求来整的

    点赞 评论 复制链接分享
  • xnjnmn xnjnmn 2009-04-14 17:07

    LZ
    查看一下数据库现有的进程数,是否已经达到参数processes的大小。
    1.select count(*) from v$process;取得数据库目前的进程数。
    2.select value from v$parameter where name = 'processes';取得进程数的上限。
    3.如已达到上限,修改initSID.ora中的processes的大小。
    4.重新启动数据库到nomount状态下,执行create spfile from pfile; 并startup open。

    点赞 评论 复制链接分享
  • weixin_42515006 天动 2009-04-15 23:27

    添加procces数,不治本的。

    上数据库连接缓冲池。

    点赞 评论 复制链接分享
  • heisetoufa limon758 2009-04-22 10:22

    查看一下数据库现有的进程数,看看是不是已经达到参数processes的大小

    1,select count(*) from v$process; 取得数据库目前的进程数。
    2,select value from v$parameter where name = 'processes'; 取得进程数的上限。
    3,如已达到上限,修改initSID.ora中的processes的大小。
    4,alter system set processes = 600 scope = spfile;修改最大连接数:
    5,重新启动数据库到nomount状态下,执行create spfile from pfile; 并startup open。

    查询数据库自启动以来最大的并发数量

    select * from v$license

    可以做成动态服务器
    先设置一个processes,若连接达到一定值则增加processes数量,回落后再改回原始processes数量

    因不知是否程序连接未关闭等问题造成的资源浪费,故提出此解决方案

    点赞 评论 复制链接分享

相关推荐