您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> JAVA >> 辅导 >> 正文    
  一个Oracle数据库链接的JavaBean实例 【注册男护士专用博客】          

一个Oracle数据库链接的JavaBean实例

www.nanhushi.com     佚名   不详 

  一个Oracle数据库链接的JavaBean实例

  public class OracleConnectionManager {

  private DBConnectionManager connMgr;
  private final String poolName="Oracle";
  private Connection conn;

  public OracleConnectionManager() {

  String userID = "system";
  String password = "manager";
  String JDBCDriver = "oracle.jdbc.driver.OracleDriver";
  String JDBCDriverType = "jdbc:oracle:thin";
  String DBHost = "127.0.0.1";
  String Port = "1521";
  String SID="sid";
  String url = JDBCDriverType+":@"+DBHost + ":" + Port + ":" +SID;

  connMgr = DBConnectionManager.getInstance();
  if (DBConnectionManager.clients == 1){
  connMgr.init(poolName, JDBCDriver, url, userID, password);
  connMgr.init("egongOracle", JDBCDriver, JDBCDriverType+":@110.7.6.22:1521:egong", "abcusername", "abcpasswd");

  }
  }

  public Connection getConnection() {
  return (conn=connMgr.getConnection(poolName));
  }

  public Connection getConnection(String newOracle) {
  return (conn=connMgr.getConnection(newOracle));
  }

  public void freeConnection() {
  connMgr.freeConnection(poolName,conn);
  }

  public void freeConnection(String newOracle) {
  connMgr.freeConnection(newOracle,conn);
  }

  }

  public class DBConnectionManager {
  static private DBConnectionManager instance=null; // The single instance
  static public int clients=0;

  private Vector drivers = new Vector();
  private PrintWriter log;
  private Hashtable pools = new Hashtable();
  private final int MAX_CONN = 1000;

  /**
  * Returns the single instance, creating one if it´s the
  * first time this method is called.
  *
  * @return DBConnectionManager The single instance.
  */
  static synchronized public DBConnectionManager getInstance() {
  if (instance == null) {
  instance = new DBConnectionManager();
  }
  clients++;
  return instance;
  }

  /**
  * A private constructor since this is a Singleton
  */
  private DBConnectionManager() {
  // init();
  }

  /**
  * Returns a connection to the named pool.
  *
  * @param name The pool name as defined in the properties file
  * @param con The Connection
  */
  public void freeConnection(String name, Connection con) {
  DBConnectionPool pool = (DBConnectionPool) pools.get(name);
  if (pool != null) {
  pool.freeConnection(con);
  }
  }

  /**
  * Returns an open connection. If no one is available, and the max
  * number of connections has not been reached, a new connection is
  * created.
  *
  * @param name The pool name as defined in the properties file
  * @return Connection The connection or null
  */
  public Connection getConnection(String name) {
  DBConnectionPool pool = (DBConnectionPool) pools.get(name);
  if (pool != null) {
  return pool.getConnection();
  }
  return null;
  }

  /**
  * Returns an open connection. If no one is available, and the max
  * number of connections has not been reached, a new connection is
  * created. If the max number has been reached, waits until one
  * is available or the specified time has elapsed.
  *
  * @param name The pool name as defined in the properties file
  * @param time The number of milliseconds to wait
  * @return Connection The connection or null
  */
  public Connection getConnection(String name, long time) {
  DBConnectionPool pool = (DBConnectionPool) pools.get(name);
  if (pool != null) {
  return pool.getConnection(time);
  }
  return null;
  }

  /**
  * Closes all open connections and dereGISters all drivers.
  */
  public synchronized void release() {
  // Wait until called by the last client
  if (--clients != 0) {
  return;
  }

  Enumeration allPools = pools.elements();
  while (allPools.hasMoreElements()) {
  DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();
  pool.release();
  }
  Enumeration allDrivers = drivers.elements();
  while (allDrivers.hasMoreElements()) {
  Driver driver = (Driver) allDrivers.nextElement();
  try {
  DriverManager.deregisterDriver(driver);
  log("Deregistered JDBC driver " + driver.getClass().getName());
  }
  catch (SQLException e) {
  log(e, "Can´t deregister JDBC driver: " + driver.getClass().getName());
  }
  }
  log.close();
  }

  /**
  * Creates instances of DBConnectionPool based on the properties.
  * A DBConnectionPool can be defined with the following properties:
  * <PRE>
  * <poolname>.url The JDBC URL for the database
  * <poolname>.user A database user (optional)
  * <poolname>.password A database user password (if user specified)
  * <poolname>.maxconn The maximal number of connections (optional)
  * </PRE>
  *
  * @param props The connection pool properties
  */
  private void createPools(String poolName, String url, String user, String password, int max) {
  /*
  Enumeration propNames = props.propertyNames();
  while (propNames.hasMoreElements()) {
  String name = (String) propNames.nextElement();
  if (name.endsWith(".url")) {
  String poolName = name.substring(0, name.lastIndexOf("."));
  String url = props.getProperty(poolName + ".url");
  if (url == null) {
  log("No URL specified for " + poolName);
  continue;
  }
  String user = props.getProperty(poolName + ".user");
  String password = props.getProperty(poolName + ".password");
  String maxconn = props.getProperty(poolName + ".maxconn", "0");
  int max;
  try {
  max = Integer.valueOf(maxconn).intValue();
  }
  catch (NumberFormatException e) {
  log("Invalid maxconn value " + maxconn + " for " + poolName);
  max = 0;
  }
  DBConnectionPool pool =
  new DBConnectionPool(poolName, url, user, password, max);
  pools.put(poolName, pool);
  log("Initialized pool " + poolName);
  }
  }
  */
  DBConnectionPool pool =
  new DBConnectionPool(poolName, url, user, password, max);
  pools.put(poolName, pool);
  log("Initialized pool " + poolName);
  }

  public void init(String poolName, String driver, String url, String user, String passwd) {
  init(poolName, driver, url, user, passwd, MAX_CONN);
  }

  /**
  * Loads properties and initializes the instance with its values.
  */
  public void init(String poolName, String driver, String url, String user, String passwd, int maxconn) {
  /*
  InputStream is = getClass().getResourceAsStream("/db.properties");
  Properties dbProps = new Properties();
  try {
  dbProps.load(is);
  }
  catch (Exception e) {
  System.err.println("Can´t read the properties file. " +
  "Make sure db.properties is in the CLASSPATH");
  return;
  }
  String logFile = dbProps.getProperty("logfile", "DBConnectionManager.log");

  String logFile = "." + File.separator + "logs" + File.separator + "dbpool";
  try {
  log = new PrintWriter(new FileWriter(logFile, true), true);
  }
  catch (IOException e) {
  System.err.println("Can´t open the log file: " + logFile);
  log = new PrintWriter(System.err);
  }
  */
  log = new PrintWriter(System.err);
  loadDrivers(driver);
  createPools(poolName, url, user, passwd, maxconn);
  }

  /**
  * Loads and registers all JDBC drivers. This is done by the
  * DBConnectionManager, as opposed to the DBConnectionPool,
  * since many pools may share the same driver.
  *
  * @param props The connection pool properties
  */
  private void loadDrivers(String driverClassName) {
  /*
  String driverClasses = props.getProperty("drivers");
  StringTokenizer st = new StringTokenizer(driverClasses);
  while (st.hasMoreElements()) {
  String driverClassName = st.nextToken().trim();
  try {
  Driver driver = (Driver)
  Class.forName(driverClassName).newInstance();
  DriverManager.registerDriver(driver);
  drivers.addElement(driver);
  log("Registered JDBC driver " + driverClassName);
  }
  catch (Exception e) {
  log("Can´t register JDBC driver: " +
  driverClassName + ", Exception: " + e);
  }
  }
  */
  try {
  Driver driver = (Driver)
  Class.forName(driverClassName).newInstance();
  DriverManager.registerDriver(driver);
  drivers.addElement(driver);
  log("Registered JDBC driver " + driverClassName);
  }
  catch (Exception e) {
  log("Can´t register JDBC driver: " +
  driverClassName + ", Exception: " + e);
  }
  }

  /**
  * Writes a message to the log file.
  */
  private void log(String msg) {
  log.println(new Date() + ": " + msg);
  }

  /**
  * Writes a message with an Exception to the log file.
  */
  private void log(Throwable e, String msg) {
  log.println(new Date() + ": " + msg);
  e.printStackTrace(log);
  }

  /**
  * This inner class represents a connection pool. It creates new
  * connections on demand, up to a max number if specified.
  * It also makes sure a connection is still open before it is
  * returned to a client.
  */
  class DBConnectionPool {
  private int checkedOut;
  private Vector freeConnections = new Vector();
  private int maxConn;
  private String name;
  private String password;
  private String URL;
  private String user;

  /**
  * Creates new connection pool.
  *
  * @param name The pool name
  * @param URL The JDBC URL for the database
  * @param user The database user, or null
  * @param password The database user password, or null
  * @param maxConn The maximal number of connections, or 0
  * for no limit
  */
  public DBConnectionPool(String name, String URL, String user, String password,
  int maxConn) {
  this.name = name;
  this.URL = URL;
  this.user = user;
  this.password = password;
  this.maxConn = maxConn;
  }

  /**
  * Checks in a connection to the pool. Notify other Threads that
  * may be waiting for a connection.
  *
  * @param con The connection to check in
  */
  public synchronized void freeConnection(Connection con) {
  // Put the connection at the end of the Vector
  freeConnections.addElement(con);
  checkedOut--;
  notifyAll();
  }

  /**
  * Checks out a connection from the pool. If no free connection
  * is available, a new connection is created unless the max
  * number of connections has been reached. If a free connection
  * has been closed by the database, it´s removed from the pool
  * and this method is called again recursively.
  */
  public synchronized Connection getConnection() {
  Connection con = null;
  if (freeConnections.size() > 0) {
  // Pick the first Connection in the Vector
  // to get round-robin usage
  con = (Connection) freeConnections.firstElement();
  freeConnections.removeElementAt(0);
  try {
  if (con.isClosed()) {
  log("Removed bad connection from " + name);
  // Try again recursively
  con = getConnection();
  }
  }
  catch (SQLException e) {
  log("Removed bad connection from " + name);
  // Try again recursively
  con = getConnection();
  }
  }
  else if (maxConn == 0 || checkedOut < maxConn) {
  con = newConnection();
  }
  if (con != null) {
  checkedOut++;
  }
  return con;
  }

  /**
  * Checks out a connection from the pool. If no free connection
  * is available, a new connection is created unless the max
  * number of connections has been reached. If a free connection
  * has been closed by the database, it´s removed from the pool
  * and this method is called again recursively.
  * <P>
  * If no connection is available and the max number has been
  * reached, this method waits the specified time for one to be
  * checked in.
  *
  * @param timeout The timeout value in milliseconds
  */
  public synchronized Connection getConnection(long timeout) {
  long startTime = new Date().getTime();
  Connection con;
  while ((con = getConnection()) == null) {
  try {
  wait(timeout);
  }
  catch (InterruptedException e) {}
  if ((new Date().getTime() - startTime) >= timeout) {
  // Timeout has expired
  return null;
  }
  }
  return con;
  }

  /**
  * Closes all available connections.
  */
  public synchronized void release() {
  Enumeration allConnections = freeConnections.elements();
  while (allConnections.hasMoreElements()) {
  Connection con = (Connection) allConnections.nextElement();
  try {
  con.close();
  log("Closed connection for pool " + name);
  }
  catch (SQLException e) {
  log(e, "Can´t close connection for pool " + name);
  }
  }
  freeConnections.removeAllElements();
  }

  /**
  * Creates a new connection, using a userid and password
  * if specified.
  */
  private Connection newConnection() {
  Connection con = null;
  try {
  if (user == null) {
  con = DriverManager.getConnection(URL);
  }
  else {
  con = DriverManager.getConnection(URL, user, password);
  }
  log("Created a new connection in pool " + name);
  }
  catch (SQLException e) {
  log(e, "Can´t create a new connection for " + URL);
  return null;
  }
  return con;
  }
  }
  }

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。