关于一个数据库连接会报错ORA-12519(TNS:no appropriate service handler found)的问题的解答 不吐不快
下面的是这个网站我回答的博客的原文:写了一段代码想测试连接池的效率。发现在没有使用连接池的情况下对数据库执行100次连接查询的时候,就会报ORA-12519(TNS:no appropriate service handler found),并发连接数过大。而使用连接池就不会报错。疑问的是:我在不使用连接池进行每一次连接数据表查询时,都会及时关闭流,应该是每次都释放连接的吧(也就是用了一个连接就释放一个连接,下次循环再开一个连接,那这样连接数不都应该一直是1个吗),而且没有写多线程代码呀,为什么存在并发连接?这么循环操作后为什么还会得不到连接呢?
代码块如下:
Java代码
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe"; String username ="system"; String password = "admin"; startTime = System.currentTimeMillis(); for(int i=0;i<100;i++){ try{ Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e){ e.printStackTrace(); } Connection conn = DriverManager.getConnection(url,username,password); Statement stmt = conn.createStatement();//创建陈述对象 ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ //执行指定代码段 } rs.close(); stmt.close(); conn.close(); } System.out.println("经过100次循环调用,不使用连接池所花费的时间为"+(System.currentTimeMillis()-startTime)+"ms");
报错信息:
Exception in thread "main" 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: 127.0.0.1:1521:xe at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at ConnectionPoolTest.main(ConnectionPoolTest.java:50)
------------------------------------------
问题补充:
neitheraaa 写道
试试吧 这个东西不好说 实际上你是释放了资源 但是由于你连接释放的只是你这个层面上的 真正的oracle设置项中的 数值太小
我想知道的是 难道我这么写的代码不是连接数失踪保持为1个连接的吗?因为我每次连接都释放了资源啊 如果真是自由一个连接的话?如何来的并发连接 ?就一个main主线程,哪里来的并发环境
--------------------------------------------
该问题已经关闭: 吞吞吐吐
我今天上网来看了看 是不是真的一定会出现这个问题,wo 把代码拷贝过来试了一下 首先不说代码的质量问题 有点垃圾,这个在我的电脑上运行就是没有问题的 这个说明什么呢一定是oracle的配置项问题 参数的修改 ,我倒是没有别的意思 只是请这位仁兄能不能不要这么心浮气躁,这样能写出好的程序,解决问题嘛;我总结出来出现问题解决要分析可能出现的问题 ,大致找出解决的方向,至少是排查的方向,这样才能真正的学到解决问题的方法和思路。谢谢读者听我唠叨 有问题留言!肖辉 neitheraaa@126.com