Java模擬編寫簡易資料庫連線池

2021-08-25 14:37:40 字數 3546 閱讀 8426

資料庫連線池的好處:

對於乙個簡單的資料庫應用,由於對於資料庫的訪問不是很頻繁。這時可以簡單地在需要訪問資料庫時,就新建立乙個連線,用完後就關閉它,這樣做也不會帶來什麼明顯的效能上的開銷。但是對於乙個複雜的資料庫應用,頻繁的建立、關閉連線,會極大的降低系統的效能,因為資料庫的連線是非常耗時的操作,所以可能對於資料庫連線就成了系統效能的瓶頸。

此處,編寫乙個簡單的資料庫連線池,理解資料庫連線池的實現思想。

資料庫連線池的編寫分析設計:

參考:

/*

* 資料庫連線池的配置檔案

*/public class paramconfig

# .properties檔案,#代表注釋

#對於mysql的字段

mysql.driver=com.mysql.jdbc.driver

mysql.url=jdbc:mysql://localhost:3306/test?usessl=true&rewritebatchedstatements=true

mysql.user_name=root

mysql.user_pwd=123456

#oracle的字段

oracle.driver=

oracle.url=

oracle.user_name=

oracle.user_pwd=

dbhandler介面儲存dbconfig.properties的key值:

public inte***ce dbhandler
資料庫連線池的封裝:

/*

* 資料庫連線池

*/public class dbconnpool implements datasource catch (ioexception e)

driver=getvalue(dbhandler.driver);

url=getvalue(dbhandler.url);

user_name=getvalue(dbhandler.user_name);

user_pwd=getvalue(dbhandler.user_pwd);

}private static final int default_init_size=5;//連線池預設連線數

private static arrayblockingqueueidleconnqueue;//空閒連線佇列

private static vectorbusyconnvector; //正在被使用的資料庫連線集合

private static logger logger=null;

private int size;//空閒連線數

private static dbconnpool dbconnpool=null;//使用單例模式

private dbconnpool()

/* * 提供給外界獲取此類物件的方法

*/public static dbconnpool getinstance()

return dbconnpool;

} /*

* 初始化資料庫連線池

*/private void initconnpool() catch (interruptedexception e) catch (sqlexception e)

}} /*

* 獲取空閒佇列的大小

*/protected int getidleconnqueuesize()

/*** 獲取正在使用的連線的數量

* @return

*/protected int getbusyconnvectorsize()

private string entrymsg()

@override

public connection getconnection(string username, string password) throws sqlexception

@override

public printwriter getlogwriter() throws sqlexception

@override

public void setlogwriter(printwriter out) throws sqlexception

@override

public void setlogintimeout(int seconds) throws sqlexception

@override

public int getlogintimeout() throws sqlexception

@override

public logger getparentlogger() throws sqlfeaturenotsupportedexception

@override

public t unwrap(classiface) throws sqlexception

@override

// todo auto-generated method stub

return false;

}}

資料庫連線池的管理類:

public class dbconnpoolmanage 

}

測試類:

public class test 

} catch (sqlexception e) finally

if(stmt!=null)

if(rs!=null)

} catch (sqlexception e)

} }}

分析總結:核心**:

public  connection getconnection() throws sqlexception 

busyconnvector.add(conn);

return (connection) proxy.newproxyinstance(this.getclass().getclassloader(), new class, new invocationhandler() else

}});

} catch (interruptedexception e)

return null;

}

getconnection返回的並不是「真正」的connection,而是**類(此處使用匿名類),當使用者呼叫close()方法時,不是對connection進行close操作,而是將此connection放回idleconnqueue佇列中,從busyconnvector中移除。

資料庫連線池(簡易)

手寫乙個資料庫連線池,如下 1 jdbc獲取鏈結 public class connectionresource catch sqlexception e public connection getconnection public void close catch sqlexception e 2...

Java連線資料庫

1 oracle8 8i 9i資料庫 用thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin localhost 1521 orcl 2 sql server7.0 2...

Java連線MySQL資料庫

廢話不多說,直接上 記得在用eclipse建立專案後,要匯入jdbc。首先建立乙個databaseconnection類,用來連線資料庫。public class databaseconnection catch exception e public connection getconnectin ...