oracle java pool_All About JAVA 关于数据库ORACLE驱动包中OracleConnectionPoolDataSource连接池的使用方法 | 学步园...

第三方的一个应用系统使用的是SQLSERVER数据库,根据客户需求需要将其纳入现存系统中统一管理,并更换为ORACLE数据库,我们提供相关支持。先就是要求提供一个更改为使用ORACLE数据库的方案,并将数据库连接池纳入其中。第三方应用中使用了自定义的数据结构来存储从数据库中返回的数据。根据以上情况写了一个简单的数据库连接解决方案的DEMO,供第三方使用。DEMO一共3个类PoolDbSource // 管理连接池对象包括获取连接方法的类。BaseManager // 使用PoolDbSource 获取的连接进行数据库操作封装的类。ConnectionPoolTestAction

// struts1.2的Action类。

Demo中引入的ORACLE的数据库驱动的包,其中有我们要使用的实现了数据库连接池的类 OracleConnectionPoolDataSource,需要到ORACLE网站根据自身使用的数据库版本进行下载(点击打开链接)。代码如下:

PoolDbSource 类

package com.***.connectionpool.db;

import java.sql.Connection;

import java.sql.SQLException;

import javax.sql.PooledConnection;

import oracle.jdbc.pool.*;

public class PoolDbSource

{

private static PoolDbSource instance;

private OracleConnectionPoolDataSource ocpds;

private PoolDbSource() throws SQLException{

ocpds = new OracleConnectionPoolDataSource();

ocpds.setDriverType("thin");

ocpds.setServerName("202.112.119.177");

ocpds.setNetworkProtocol("tcp");

ocpds.setDatabaseName("orcl");

ocpds.setPortNumber(1521);

ocpds.setUser("idc_yjs");

ocpds.setPassword("yjs");

}

/**

* 返回唯一实例.如果是第一次调用此方法,则创建实例

*

* @return PoolDbSource 唯一实例

* @throws SQLException

*/

static synchronized public PoolDbSource getInstance()

{

if (instance == null)

{

synchronized (PoolDbSource.class) // 加锁

{

if(instance == null) // 第二次检查

{

try

{

instance = new PoolDbSource();

}

catch (SQLException e)

{

System.out.print("=================================");

System.out.print("链接数据库失败!");

System.out.print("=================================");

System.out.print("错误信息:");

e.printStackTrace();

return null;

}

}

}

}

return instance;

}

/**

* 取得数据库连接

* @return

*/

public Connection getConnection()

{

PooledConnection pc; // 数据库连接池连接

Connection conn; // 数据库连接对象

try

{

pc = ocpds.getPooledConnection(); // 从连接池获取连接

conn = pc.getConnection();

}

catch (SQLException e)

{

System.out.print("=================================");

System.out.print("获得数据库连接失败!");

System.out.print("=================================");

System.out.print("错误信息:");

e.printStackTrace();

return null;

}

return conn;

}

}

BaseManager 类

package com.***.connectionpool.common;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import com.***.connectionpool.db.PoolDbSource;

public class BaseManager {

PoolDbSource poolDbSource; //数据源连接管理对象

Connection conn; // 数据库连接对象

public BaseManager()

{

super();

}

/**

* 执行查询语句返回数据集

* @param sql

* @return

*/

public ResultSet executeQuerySql(String sql)

{

Statement statement;

ResultSet rs = null;

try

{

poolDbSource = PoolDbSource.getInstance();

conn = poolDbSource.getConnection();

statement = conn.createStatement();

rs = statement.executeQuery(sql);

}

catch (SQLException e)

{

e.printStackTrace();

}

finally

{

//if(conn!=null)

// 因为他们有自己的数据结构,所以在这个方

// 法中实际返回的应该是他们的数据结构类型而不是ResultSet,

// 这里返回的是ResultSet所以在这里关闭conn会导致返回的rs无法使用。暂时注释掉了

//{

//try

//{

//conn.close();

//}

//catch (SQLException e)

//{

//System.out.print("关闭数据库连接出现异常。");

//}

//}

}

return rs;

}

}

ConnectionPoolTestActionpackage com.***.connectionpool.sources;

import java.sql.ResultSet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import com.***.connectionpool.common.BaseManager;

public class ConnectionPoolTestAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception

{

BaseManager baseManager = new BaseManager();

ResultSet rs = baseManager.executeQuerySql("SELECT * FROM code_school where xsbz = '0'");

if(rs.next())

{

request.setAttribute("lsh", rs.getString(1));

request.setAttribute("zgh", rs.getString(2));

}

return mapping.findForward("success"); // 返回到一个测试页面读取request.setAttribute的两个变量

}

}

关于连接池这块儿要是有什么更好更灵活的方法希望一定要留言告诉我啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值