国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java模擬.NET的連接池

2019-11-18 14:11:35
字體:
供稿:網(wǎng)友

  java模擬.NET的連接池

--------------------------------------------------------------------------------



在之前:

.NET的ADO.NET的本身包含連接池功能,而java是在第三方開發(fā)包中提高的連接池功能因此,需要去下載第三方的連接池包,但是java的連接池一般都是在EJB或者B/S系統(tǒng)中使用的(雖然也有C/S下的連接池如Borland 在Jbuilder中提供的),在一個服務(wù)性系統(tǒng)中使用起來不是很方便.再說使用第三方的開發(fā)包也不利于維護.因此決定自己寫一個連接池的開發(fā)包.此連接池中主要解決的是提高數(shù)據(jù)庫訪問性能,并且盡可能減少連接數(shù)目.

說明:

此連接池有三個類和一個接口組成,三個類分別是:

DBConnectionPool 數(shù)據(jù)庫連接池,用戶可以通過此類來使用連接池的功能.

PoolConnection 一個實現(xiàn)了java.sql.Connection的warp類,用來和數(shù)據(jù)庫進行通訊.

theOnClose 實現(xiàn)了接口OnConnectionClose的一個類用還處理釋放數(shù)據(jù)庫連接的是動作決定是關(guān)閉數(shù)據(jù)庫還是返回池中

接口 :

OnConnectionClose:此接口是一個聲明,因為本人很不喜歡java的事件機制因此,我經(jīng)常自己寫一些接口來模擬時間,沒有java的事件機制那么強大也沒有那么復(fù)雜.但是效率要比java的事件機制要高那么一點點(笑:).

本來要上傳這幾個小類的UML圖的但是我一點IE就死,所以算了.就只上傳代碼.還望方家指正.

代碼:

package DBTools;

/**
* <p>T數(shù)據(jù)庫連接池工具 </p>
* <p>模擬.NET的連接池,俺一直以為.NET比java優(yōu)秀 </p>
* <p>Copyright: 可以隨便使用,假如有改進最好通知俺</p>
* <p>Company:自己作品 </p>
* @author董平雷
* @version 1.0
*/
import java.sql.*;
import java.util.*;
import java.io.*;

interface OnConnectionClose {
public void Action(PoolConnection sender);

}

public class DBConnectionPool {

PRivate static Vector pConnectionVector = new Vector();
// private static int Count=0;
private static int minCount = 1;
private static String URL = "";
private static String User = "";
private static String PassWord = "";
private static String DriverName="";
synchronized public static void setMinCount(int Value) {
minCount = Value;
}

synchronized public static int getMinCount() {
return minCount;
}

synchronized public static int getCout() {
return pConnectionVector.size();
}

synchronized public static Connection getConnection() throws SQLException {
PoolConnection pConnection = null;
// int aCount=pConnectionVector.size();

for (int i = 0; i < pConnectionVector.size(); i++) {
Object oCon = pConnectionVector.elementAt(i);
if (oCon instanceof PoolConnection) {
PoolConnection aCon = (PoolConnection) oCon;
if (!aCon.isUsed()) {
pConnection = aCon;
break;
}

}

}
if (pConnection == null) {
pConnection = getNewConnection();
pConnectionVector.add(pConnection);
}
return pConnection;

}

private static PoolConnection getNewConnection() throws SQLException {
try
{
Class.forName( DriverName);
}catch(ClassNotFoundException ex)
{
ex.printStackTrace();
}
PoolConnection con = new PoolConnection(URL, User, Password);
con.setOnClose(new theOnClose(pConnectionVector));
return con;
}

synchronized public static void SetJDBC(String url, String user, String password) {
URL = url;
User = user;
Password = password;

}

synchronized public static void setURL(String url) {
URL = url;

}

synchronized public static String getUrl() {
return URL;

}
synchronized public static void setUser(String user)
{
User=user;
}
synchronized public static String getUser()
{
return User;
}
synchronized public static void setPassword(String password)
{
Password=password;
}
synchronized public static String getPassword()
{
return Password;
}

synchronized public static void setDriverName(String dName)
{
DriverName=dName;

}
synchronized public static String getDriverName()
{
return DriverName;
}
}
class theOnClose
implements OnConnectionClose {
private Vector v;
public theOnClose(Vector vt) {
v = vt;
}

public void Action(PoolConnection sender) {
v.remove(sender);

}
}

class PoolConnection
implements Connection , Serializable{
private Connection aCon = null;
private boolean closed = false;
private boolean inUse = false;
private String DriverName;
private OnConnectionClose onClose = null;
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
protected PoolConnection() {
}

public PoolConnection(String Url, String User, String Password) throws
SQLException {

aCon = DriverManager.getConnection(Url, User, Password);
closed = false;
inUse=true;

}

public PoolConnection(String Url) throws Exception {
aCon = DriverManager.getConnection(Url);
closed = false;
inUse=true;
}

public Statement createStatement() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method createStatement() not yet implemented.");
return aCon.createStatement();
}

public PreparedStatement prepareStatement(String sql) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method prepareStatement() not yet implemented.");
return aCon.prepareStatement(sql);
}

public CallableStatement prepareCall(String sql) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method prepareCall() not yet implemented.");
return aCon.prepareCall(sql);
}

public String nativeSQL(String sql) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method nativeSQL() not yet implemented.");
return aCon.nativeSQL(sql);
}

public void setAutoCommit(boolean autoCommit) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method setAutoCommit() not yet implemented.");
aCon.setAutoCommit(autoCommit);
}

public boolean getAutoCommit() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method getAutoCommit() not yet implemented.");
return aCon.getAutoCommit();
}

public void commit() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method commit() not yet implemented.");
aCon.commit();
}

public void rollback() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method rollback() not yet implemented.");
aCon.rollback();
}

public void close() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method close() not yet implemented.");
if(DBConnectionPool.getCout()<=DBConnectionPool.getMinCount())
{
inUse = false;
}else
{
closeConnection();
}


}

public boolean isClosed() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method isClosed() not yet implemented.");
return closed;
}

public DatabaseMetaData getMetaData() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method getMetaData() not yet implemented.");
return aCon.getMetaData();
}

public void setReadOnly(boolean readOnly) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method setReadOnly() not yet implemented.");
aCon.setReadOnly(readOnly);
}

public boolean isReadOnly() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method isReadOnly() not yet implemented.");
return isReadOnly();
}

public void setCatalog(String catalog) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method setCatalog() not yet implemented.");
aCon.setCatalog(catalog);
}

public String getCatalog() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method getCatalog() not yet implemented.");
return aCon.getCatalog();
}

public void setTransactionIsolation(int level) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method setTransactionIsolation() not yet implemented.");
aCon.setTransactionIsolation(level);
}

public int getTransactionIsolation() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method getTransactionIsolation() not yet implemented.");
return aCon.getTransactionIsolation();
}

public SQLWarning getWarnings() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method getWarnings() not yet implemented.");
return aCon.getWarnings();
}

public void clearWarnings() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method clearWarnings() not yet implemented.");
aCon.clearWarnings();
}

public Statement createStatement(int resultSetType, int resultSetConcurrency) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method createStatement() not yet implemented.");
return aCon.createStatement(resultSetType, resultSetConcurrency);
}

public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method prepareStatement() not yet implemented.");
return aCon.prepareStatement(sql, resultSetType, resultSetConcurrency);
}

public CallableStatement prepareCall(String sql, int resultSetType,
int resultSetConcurrency) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method prepareCall() not yet implemented.");
return aCon.prepareCall(sql, resultSetType, resultSetConcurrency);
}

public Map getTypeMap() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method getTypeMap() not yet implemented.");
return aCon.getTypeMap();
}

public void setTypeMap(Map map) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method setTypeMap() not yet implemented.");
aCon.setTypeMap(map);
}

public void setHoldability(int holdability) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method setHoldability() not yet implemented.");
aCon.setHoldability(holdability);
}

public int getHoldability() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method getHoldability() not yet implemented.");
return aCon.getHoldability();
}

public Savepoint setSavepoint() throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method setSavepoint() not yet implemented.");
return setSavepoint();
}

public Savepoint setSavepoint(String name) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method setSavepoint() not yet implemented.");
return setSavepoint(name);
}

public void rollback(Savepoint savepoint) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method rollback() not yet implemented.");
aCon.rollback(savepoint);
}

public void releaseSavepoint(Savepoint savepoint) throws SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method releaseSavepoint() not yet implemented.");
aCon.releaseSavepoint(savepoint);
}

public Statement createStatement(int resultSetType, int resultSetConcurrency,
int resultSetHoldability) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method createStatement() not yet implemented.");
return aCon.createStatement(resultSetType, resultSetConcurrency,
resultSetHoldability);
}

public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method prepareStatement() not yet implemented.");
return aCon.prepareStatement(sql, resultSetType, resultSetConcurrency,
resultSetHoldability);
}

public CallableStatement prepareCall(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method prepareCall() not yet implemented.");
return aCon.prepareCall(sql, resultSetType, resultSetConcurrency,
resultSetHoldability);
}

public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method prepareStatement() not yet implemented.");
return aCon.prepareStatement(sql, autoGeneratedKeys);
}

public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
// throw new java.lang.UnsupportedOperationException("Method prepareStatement() not yet implemented.");
return aCon.prepareStatement(sql, columnIndexes);
}

public PreparedStatement prepareStatement(String sql, String[] columnNames) throws
SQLException {
/**@todo Implement this java.sql.Connection method*/
//throw new java.lang.UnsupportedOperationException("Method prepareStatement() not yet implemented.");
return aCon.prepareStatement(sql, columnNames);
}

public void closeConnection() throws SQLException {
if (onClose != null) {
onClose.Action(this);
}
aCon.close();

}

public boolean isUsed() {
return inUse;

}

public void use() {
inUse = true;
}

public void setOnClose(OnConnectionClose Action) {
onClose = Action;

}

}

以上就是我所寫的連接池代碼.

使用方法:
DBTools.DBConnectionPool.SetJDBC("jdbc:MySQL://fireBird/trmg?useUnicode=true&characterEncoding=GB2312",
"Administrator","");
DBTools.DBConnectionPool.setDriverName("com.mysql.jdbc.Driver");

java.sql.Connection con = DBTools.DBConnectionPool.getConnection();

當(dāng)使用完畢了別忘記將con關(guān)閉:).

似乎現(xiàn)在使用java的人不答應(yīng)人說java的問題,java的內(nèi)存回收存在大問題.內(nèi)存泄漏的厲害,建議如非必要不要使用new來生成新的對象.這樣可能可以讓我們的系統(tǒng)可以活的更長久一些.還有linux下java性能慘不忍睹,在俺測試的平臺中win32反而是最高的.郁悶郁悶不是罪.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普定县| 积石山| SHOW| 长宁区| 庆云县| 合阳县| 平湖市| 新宁县| 南充市| 吴川市| 松原市| 怀化市| 汽车| 三门峡市| 林西县| 大足县| 永寿县| 阿图什市| 新建县| 微山县| 汕头市| 开封县| 泰来县| 临沭县| 虎林市| 三河市| 玉林市| 鸡西市| 沙田区| 类乌齐县| 云梦县| 泾源县| 屯昌县| 全椒县| 理塘县| 托克逊县| 张家口市| 古浪县| 东兴市| 聊城市| 综艺|