站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题100分求数据库连接池算法

100分求数据库连接池算法

摘要: 100分求数据库连接池算法


是关于MS SQL的数据库连接池的算法


什么算法,是代码吧?



把要求写清楚点啊


算法?


数据库连接池调用的思路也可以


Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup(-#34;java:comp/env-#34;);
//获取连接池对象
Object obj = (Object) ctx.lookup(-#34;jdbc/SqlServerDB-#34;);
//类型转换
javax.sql.DataSource ds = (javax.sql.DataSource)obj;
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String strSql = -#34; insert into test(id,name) values(-#39;00001-#39;,-#39;fany-#39;)-#34;;
stmt.executeUpdate(strSql);
strSql = -#34; select id,name from test -#34;;
ResultSet rs = stmt.executeQuery(strSql);



要自己写一个连接池管理吗?


学习,顶一下


hoho
不是调用而是自己写一个啦
主要说一下该如何处理池子里的连接,如何判断连接是好的
假如连接在使用过程中坏掉了,该如何处理没完成的工作,虽然知道没完成的工作要继续获得一个连接,但是如何判断正在使用的连接是坏的呢?


hoho
不是调用而是自己写一个啦
主要说一下该如何处理池子里的连接,如何判断连接是好的
假如连接在使用过程中坏掉了,该如何处理没完成的工作,虽然知道没完成的工作要继续获得一个连接,但是如何判断正在使用的连接是坏的呢

-- 这些问题 web server 都会解决的


不是web的是EJB的类型的


package dbpool;
import java.sql.*;

public class ConnBean {
private Connection conn = null;
private boolean inuse = false;

public ConnBean() {}

public ConnBean(Connection con) {
if (con != null)
conn = con;
}

public Connection getConnection() {
return conn;
}

public void setConnection(Connection con) {
conn = con;
}

public void setInuse(boolean inuse) {
this.inuse = inuse;
}

public boolean getInuse() {
return inuse;
}

public void close() {
try {
conn.close();
conn=null;
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}


package dbpool;
import java.sql.*;
import java.util.*;
public class PoolBean implements java.io.Serializable {
private int poolsize = 5;
private ConnBean connBean = null;
private ConnParam cp=null;
private Vector pool = null;
private boolean isInit=false;
public PoolBean()
{
}
public PoolBean(ConnParam cp)
{
this.cp=cp;
}
public boolean getState()
{
return isInit;
}
public void setState(boolean isInit)
{
this.isInit=isInit;
}
public void setSize(int s) {
if (s -#62; 1 -#38;-#38; !isInit)
poolsize = s;
}
public int getSize() {
return poolsize;
}
public void setConnBean(ConnBean cb) {
if (cb != null) connBean = cb;
}
public ConnBean getConnBean() {
return this.connBean;
}
public void setConnParam(ConnParam cp)
{
this.cp=cp;
}
private Connection createConnection() throws Exception {
return DriverManager.getConnection(cp.getUrl(), cp.getUserName(),cp.getPassword());
}

public synchronized void initializePool() throws Exception {
if (cp == null) cp=new HesConnParam();
if (poolsize -#60; 5) poolsize=5;
try {
Class.forName(cp.getDriver());
for (int i = 0; i -#60; poolsize; i++) {
Connection con = createConnection();
if (con != null) {
ConnBean connBean = new ConnBean(con);
addConnection(connBean);
}
}
isInit=true;
} catch (Exception e) {
System.err.println(e.getMessage());
throw new Exception(e.getMessage());
}
}

private void addConnection(ConnBean connbean) {
if (pool == null) pool = new Vector(poolsize);
pool.addElement(connbean);
}

public synchronized void close(Connection con) {
for (int i = 0; i -#60; pool.size(); i++)
{
ConnBean connBean = (ConnBean)pool.elementAt(i);
if (connBean.getConnection() == con)
{
connBean.setInuse(false);
break;
}
}
}

public synchronized Connection getConnection() throws Exception {
ConnBean connBean = null;
for (int i = 0; i -#60; poolsize; i++)
{
connBean = (ConnBean) pool.elementAt(i);
if (connBean.getInuse() == false)
{
connBean.setInuse(true);
return connBean.getConnection();
}
}
try
{
Connection con = createConnection();
connBean = new ConnBean(con);
connBean.setInuse(true);
pool.addElement(connBean);
poolsize++;
}
catch (Exception e)
{
System.out.println(e.getMessage());
throw new Exception(e.getMessage());
}
return connBean.getConnection();
}

public synchronized void emptyPool() {
if(pool ==null) return;
for (int i = 0; i -#60; poolsize; i++)
{
ConnBean connBean = (ConnBean) pool.elementAt(i);
if (connBean.getInuse() == false)
{
connBean.close();
}
else
{
try {
java.lang.Thread.sleep(2000);
connBean.close();
} catch (InterruptedException ie) {
System.err.println(-#34;关闭连接池出错:-#34;+ie.getMessage());
}
}
}


}
public void reSetPool()
{
emptyPool();
pool.removeAllElements();
poolsize = 5;
connBean = null;
cp=null;
isInit=false;
}
}


package dbpool;

public abstract class ConnParam {
public final String ORADRIVER=-#34;oracle.jdbc.driver.OracleDriver-#34;;
public final String SQLSERVERDRIVER=-#34;com.microsoft.jdbc.sqlserver.SQLServerDriver-#34;;
public abstract String getDriver();
public abstract String getUrl();
public abstract String getUserName();
public abstract String getPassword();
}


用这个吧,我专门为sqlserver和oracle写的


↑返回目录
前一篇: 什么是对象串行化 是干什么的?
后一篇: 一个新手的迷茫(散分)