关于连接池里Connection的地址错误问题

wqdsb 2017-05-24 11:30:43

//自定义连接池,初始连接数5,最大为10
public class mypool {
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:8078/test";
public static final String USER = "root";
public static final String PASSWORD = "22222";

private LinkedList<Connection> pool=new LinkedList<>();

private int initCount=5;
private int currentCount=0;
private int max=10;
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public mypool(){
for(int i=0;i<initCount;i++){
pool.addLast(createConnection());
currentCount++;
}
}

private Connection createConnection(){
Connection conn=null;
try {
conn= DriverManager.getConnection(URL,USER,PASSWORD);
myConnection mc=new myConnection(conn,this);
return mc;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}

}

public Connection getConnetion(){
if(pool.size()>0){ //<5
return pool.removeFirst();
}
if(currentCount<max){ //5-10
currentCount++;
System.out.println(currentCount);
return createConnection();

}
//超过最大连接数
throw new RuntimeException("超过最大连接数");
}

public void closeConnection(Connection c){
pool.addLast(c);
}

public LinkedList<Connection> getPool() {
return pool;
}

}


//这是代理类
public class myConnection implements Connection{

private mypool mo;
private Connection conn; //真实的Connection
//private
public myConnection(Connection c,mypool pool){
conn=c;
mo=pool;
}
/*
* 只重写close()
*/
@Override
public void close() throws SQLException {
System.out.println("关闭");
mo.closeConnection(conn);
}

// @Override
// public String toString() {
// return " conn=" + conn ;
// }
........其它的调用Connection 的方法
}


//测试类
public class test {
public static void main(String[] args) {
mypool mp=new mypool();
for(int i=0;i<6;i++){
Connection conn=mp.getConnetion();
System.out.println(conn);
if(i==3){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

在myConnection 类是否重写了toString()方法的结果如下
无toString
JDBC_15.myConnection@b81eda8
JDBC_15.myConnection@68de145
JDBC_15.myConnection@27fa135a
JDBC_15.myConnection@46f7f36a
关闭
JDBC_15.myConnection@421faab1
com.mysql.jdbc.JDBC4Connection@2b71fc7e

有toString
conn=com.mysql.jdbc.JDBC4Connection@b81eda8
conn=com.mysql.jdbc.JDBC4Connection@68de145
conn=com.mysql.jdbc.JDBC4Connection@27fa135a
conn=com.mysql.jdbc.JDBC4Connection@46f7f36a
关闭
conn=com.mysql.jdbc.JDBC4Connection@421faab1
com.mysql.jdbc.JDBC4Connection@46f7f36a

为什么无toString的结果中放回去的Connection地址变了,按理说放回池中了地址不会变啊
...全文
172 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧