请问高手帮小第看看我写的一个连接连接池的连接(connect).所以可以用但是。发现一个严重问题。代码如下:这个是我连接连接池的连接类返回一个连接
package shenbao;
import javax.sql.*;
import java.sql.*;
import javax.naming.*;
public class Connect {
private javax.sql.DataSource ds=null;
private java.sql.Connection conn=null;
public Connection getConnection(){
try
{
javax.naming.Context ctx= new InitialContext();
ds = (DataSource) ctx.lookup("oracleserver");//oracleserver这个是在weblogic里面配置的JNDI Name:名称。
conn=ds.getConnection();
ctx.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ds=null;
}
return conn;
}
}
下面是我的调用:
java.sql.Connection conn=null;
java.sql.Statement stm=null;
java.sql.PreparedStatement pstmt=null;
java.sql.ResultSet rst= null; con = new Connect();
conn=con.getConnection();
stm=conn.createStatement();
try
{}
catch(Exception e)
{}
finally
{
rst.close();
con=null;
conn.close();
}
这样我程序会出现一个奇怪的问题,
当我查询几次后,再点击查询就会出现:
java.lang.NullPointerException
我确定不是我程序那里真出现空指针问题。应该是连接数据库问题。因为我再次启动weblogic后就能打开了。而出现空指针后必须要重新启动weblogic。不然打开那个页面多少java.lang.NullPointerException
.....
我想问问到底是我写的连接类(Connet)有问题。还是我创建一个con = new Connect();后没有释放连接呢。请高手们指点。如果是我的连接类写错了。请贴一个给我好吗。谢谢
给你80分。急急急
package shenbao;
import javax.sql.*;
import java.sql.*;
import javax.naming.*;
public class Connect {
private javax.sql.DataSource ds=null;
private java.sql.Connection conn=null;
public Connection getConnection(){
try
{
javax.naming.Context ctx= new InitialContext();
ds = (DataSource) ctx.lookup("oracleserver");//oracleserver这个是在weblogic里面配置的JNDI Name:名称。
conn=ds.getConnection();
ctx.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ds=null;
}
return conn;
}
}
下面是我的调用:
java.sql.Connection conn=null;
java.sql.Statement stm=null;
java.sql.PreparedStatement pstmt=null;
java.sql.ResultSet rst= null; con = new Connect();
conn=con.getConnection();
stm=conn.createStatement();
try
{}
catch(Exception e)
{}
finally
{
rst.close();
con=null;
conn.close();
}
这样我程序会出现一个奇怪的问题,
当我查询几次后,再点击查询就会出现:
java.lang.NullPointerException
我确定不是我程序那里真出现空指针问题。应该是连接数据库问题。因为我再次启动weblogic后就能打开了。而出现空指针后必须要重新启动weblogic。不然打开那个页面多少java.lang.NullPointerException
.....
我想问问到底是我写的连接类(Connet)有问题。还是我创建一个con = new Connect();后没有释放连接呢。请高手们指点。如果是我的连接类写错了。请贴一个给我好吗。谢谢
给你80分。急急急
帮楼主顶。
conn=con.getConnection();
stm=conn.createStatement();应该是放在try{}里面的,而你没有。所以出了错也不会捕获,更不流到finally那里关闭,
tomcat直接使用服务器来配置好像会有问题,修改server.xml就好了
weblogic不太清楚
rst.close();
con=null;
conn.close();
上面不是已经关闭了了解吗。stm我也关了。正常情况下。
他是正常情况下运行10次就出现了。
把这句去掉试试吧
<JDBC> <BEA-001074> <A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed
by the garbage collector and returned to the connection pool. The following stack trace at create shows where the leaked connection was created. [Null exception passed, creating stack trace for offending caller]
weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool MyJDBC Connection Pool to allocate to applications, please increase the size of the pool and retry..
at weblogic.jdbc.common.internal.JDBCUtil.wrapAndThrowResourceException(Ljava/lang/Exception;Ljava/lang/String;)V(JDBCUtil.java:205)
at weblogic.jdbc.pool.Driver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(Driver.java:161)
at weblogic.jdbc.jts.Driver.getNonTxConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(Driver.java:540)
at weblogic.jdbc.jts.Driver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(Driver.java:139)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection()Ljava/sql/Connection;(RmiDataSource.java:329)
at shenbao.Connect.getConnection()Ljava/sql/Connection;(Connect.java:13)