[size=medium][color=red]下面的是这个网站我回答的博客的原文:[/color][/size]写了一段代码想测试连接池的效率。发现在没有使用连接池的情况下对数据库执行100次连接查询的时候,就会报ORA-12519(TNS:no appropriate service handler found),并发连接数过大。而使用连接池就不会报错。疑问的是:我在不使用连接池进行每一次连接数据表查询时,都会及时关闭流,应该是每次都释放连接的吧(也就是用了一个连接就释放一个连接,下次循环再开一个连接,那这样连接数不都应该一直是1个吗),而且没有写多线程代码呀,为什么存在并发连接?这么循环操作后为什么还会得不到连接呢?
代码块如下:
Java代码
报错信息:
------------------------------------------------------------------------------------------------------------------
问题补充:
neitheraaa 写道
试试吧 这个东西不好说 实际上你是释放了资源 但是由于你连接释放的只是你这个层面上的 真正的oracle设置项中的 数值太小
我想知道的是 难道我这么写的代码不是连接数失踪保持为1个连接的吗?因为我每次连接都释放了资源啊 如果真是自由一个连接的话?如何来的并发连接 ?就一个main主线程,哪里来的并发环境
--------------------------------------------------------------------------------
该问题已经关闭: 吞吞吐吐
[size=medium][color=red]
我今天上网来看了看 是不是真的一定会出现这个问题,wo 把代码拷贝过来试了一下 首先不说代码的质量问题 有点垃圾,这个在我的电脑上运行就是没有问题的 这个说明什么呢一定是oracle的配置项问题 参数的修改 ,我倒是没有别的意思 只是请这位仁兄能不能不要这么心浮气躁,这样能写出好的程序,解决问题嘛;我总结出来出现问题解决要分析可能出现的问题 ,大致找出解决的方向,至少是排查的方向,这样才能真正的学到解决问题的方法和思路。谢谢读者听我唠叨 有问题留言!肖辉 neitheraaa@126.com[/color][/size]
代码块如下:
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主线程,哪里来的并发环境
--------------------------------------------------------------------------------
该问题已经关闭: 吞吞吐吐
[size=medium][color=red]
我今天上网来看了看 是不是真的一定会出现这个问题,wo 把代码拷贝过来试了一下 首先不说代码的质量问题 有点垃圾,这个在我的电脑上运行就是没有问题的 这个说明什么呢一定是oracle的配置项问题 参数的修改 ,我倒是没有别的意思 只是请这位仁兄能不能不要这么心浮气躁,这样能写出好的程序,解决问题嘛;我总结出来出现问题解决要分析可能出现的问题 ,大致找出解决的方向,至少是排查的方向,这样才能真正的学到解决问题的方法和思路。谢谢读者听我唠叨 有问题留言!肖辉 neitheraaa@126.com[/color][/size]