All About JAVA 关于数据库ORACLE驱动包中OracleConnectionPoolDataSource连接池的使用方法
来源:互联网 发布:随身携带淘宝去异界 编辑:程序博客网 时间:2024/05/22 13:47
2011-09-28 注,在oracle网站发现这篇文章写到的方法已经不再赞成被使用,参见:http://download.oracle.com/docs/cd/B12037_01/java.101/b10979/conncache.htm
第三方的一个应用系统使用的是SQLSERVER数据库,根据客户需求需要将其纳入现存系统中统一管理,并更换为ORACLE数据库,我们提供相关支持。先就是要求提供一个更改为使用ORACLE数据库的方案,并将数据库连接池纳入其中。第三方应用中使用了自定义的数据结构来存储从数据库中返回的数据。根据以上情况写了一个简单的数据库连接解决方案的DEMO,供第三方使用。DEMO一共3个类PoolDbSource // 管理连接池对象包括获取连接方法的类。BaseManager // 使用PoolDbSource 获取的连接进行数据库操作封装的类。ConnectionPoolTestAction // struts1.2的Action类。
参考文章:http://download.oracle.com/docs/cd/A97630_01/java.920/a96654/connpoca.htm
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; }}ConnectionPoolTestAction
package 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的两个变量 }}
关于连接池这块儿要是有什么更好更灵活的方法希望一定要留言告诉我啊。
- All About JAVA 关于数据库ORACLE驱动包中OracleConnectionPoolDataSource连接池的使用方法
- java 连接数据库(oracle)之加载驱动包
- 关于java驱动连接数据库
- All About Java 关于Java的一切 : 工具, 类库, 框架
- All About Java 关于Java的一切 : 工具, 类库, 框架
- All About Java 关于Java的一切 : 工具, 类库, 框架
- All About Java 关于Java的一切 : 工具, 类库, 框架
- All About JAVA 关于JAVA的几种常用数据结构
- oracle连接java所需的驱动包的位置
- java中连接oracle数据库的方法
- java连接oracle数据库JDBC使用的jar报包
- oracle数据库JDBC驱动包的区别
- 关于项目中数据库驱动jar、JDK和连接池DBCP jar之间的版本匹配
- All about oracle profile
- All about oracle AWR...
- All about oracle process
- all about oracle ASM
- java中连接oracle数据库
- 关于Activity和Task的设计思路和方法
- UART的RTS和CTS
- MMX-SSE
- 打开Activity方法
- BufferedReader 、 InputStreamReader 、 InputStream的一般讲解(一)
- All About JAVA 关于数据库ORACLE驱动包中OracleConnectionPoolDataSource连接池的使用方法
- android (10)
- MPlayer视频输出框架分析
- OpenCV学习 网址和网站
- Android 应用程序中使用 Internet 数据(XML、JSON 和 protocol buffers)
- 从Android浏览器(并不是Appliaction里面的webkit)打开应用程序/应用商店
- oracle自动备份方法
- OpenCV结构
- 如果你使用BitBle复制位图,结果显示出来是黑色的...