我现在在做一个小项目,环境是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.<init>(PhysicalConnection.java:343)
at oracle.jdbc.driver.T4CConnection.<init>(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;
}

解决方案 »

  1.   

    能再详细点描述吗?你是连接本地的Oracle,还是远程的
    Oracle运行的模式是共享还是专用模式?
    你的DBURL是怎么写的?
    你说的间接性是多长时间间隔?
      

  2.   

    我连接的是远程的,是共享模式连接参数:
       driverClassName=oracle.jdbc.driver.OracleDriver   
       url=jdbc:oracle:thin:@192.168.133.250:1521:oracle  
       username=oracle
       password=oracle
    那个间隔不一定,看我操作的次数了 呵呵~
      

  3.   

    oracle是服务名还是实例名?
    你tnsnames.ora里的内容贴上来看看
      

  4.   

    确保代码中使用的是sid而不是service name,如果是共享连接下偶然出现异常,可以尝试增加dispatcher数量
      

  5.   

    DBURL这个要是数据库的SID,这个名字应该不对。再有看看数据库服务器端监听是否打开。
      

  6.   

    # tnsnames.ora Network Configuration File: E:\Oracle\NETWORK\ADMIN\tnsnames.ora
    # Generated by Oracle configuration tools.ORACLE =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = oracle)
        )
      )EXTPROC_CONNECTION_DATA =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
      )
      

  7.   

    先用其它方式连连,不要先把JAVA的因素搞进来. 
      

  8.   

    有多少人再做这个项目,你试着修改一下最大连接数。以前我遇到是这个问题。alter system set processes = 300 scope = spfile;然后重启oracle
      

  9.   

    谢谢楼上的。设一下processes,果然行了。