dbmanager.java

来自「短信系统SMS:支持普通短信、长短信和wap push短信的发送。」· Java 代码 · 共 143 行

JAVA
143
字号
package com.ekun.common.db;

import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;

import com.ekun.common.log.*;
import com.ekun.common.util.*;

public class DBManager
{
    public DBManager() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    //datasource cache
  private static Hashtable dsHash = new Hashtable();

  /**
   * 根据jdbc驱动参数获得数据库连接。
   * @param jdbcDriver String
   * @param jdbcUrl String
   * @param dbUserName String
   * @param DBPasswd String
   * @return Connection
   */
  private static Connection getDBConnection(String jdbcDriver, String jdbcUrl, String dbUserName,
                                               String dbPasswd) throws DBAccessException
  {
    Connection conn = null;
    try
    {
      java.sql.Driver driver = (java.sql.Driver) Class.forName(jdbcDriver).newInstance();
      DriverManager.registerDriver(driver);
      conn = DriverManager.getConnection(jdbcUrl, dbUserName, dbPasswd);
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
      throw new DBAccessException(ex.getMessage(), ex);
    }
    return conn;
  }

  /**
   * 根据配置获得Context
   * @throws NamingException
   * @return Context
   */
  private static Context getDefaultContext() throws NamingException
  {
    Hashtable htable = new Hashtable();
    htable.put(Context.INITIAL_CONTEXT_FACTORY, DBConfigure.getInstance().getJavaNameingFactory());
    htable.put(Context.PROVIDER_URL, DBConfigure.getInstance().getJavaNameingProvider());
    InitialContext ctx = null;
    ctx = new InitialContext(htable);
    return ctx;
  }

  /**
   * 根据配置项中的JNDI参数获取数据库连接。
   * @return Connection
   */
  private static Connection getJNDIDBConnection() throws DBAccessException
  {
    Connection conn = null;
    String jndiName = DBConfigure.getInstance().getJNDIName();
    try
    {
      Context cxt = getDefaultContext();
      DataSource ds = (DataSource) dsHash.get(jndiName);
      if (ds == null)
      {
        ds = (DataSource) cxt.lookup(jndiName);
        //cache it
        dsHash.put(jndiName, ds);
      }
      conn = ds.getConnection();
    }
    catch (NamingException nmex)
    {
      throw new DBAccessException("getDefaultContext Error!", nmex);
    }
    catch (SQLException sqlex)
    {
      throw new DBAccessException("lookup jnid error!", sqlex);
    }
    return conn;
  }

    private void jbInit() throws Exception {
    }

    public static synchronized Connection getDBConn() throws DBAccessException
    {
      DBConfigure instance = DBConfigure.getInstance();
      if(instance.isDevModal())
      {
        if(instance.isUseDBPool())
        {
          try{
            return JdbcConnectionPool.getConnection();
          }catch(SQLException sqlex){
            throw new DBAccessException(sqlex.getMessage(), sqlex);
          }
        }
        else
          return getDBConnection(instance.getJDBCDriver(),
                                instance.getJDBCUrl(),
                                instance.getDBUserName(),
                                instance.getDBPassword());
      }
      else
      {
        return getJNDIDBConnection();
      }
    }

    public static void main(String[] args)
    {
      try
      {
        DBConfigure.getInstance().loadConfig("config/db.ini");
        DBConfigure.getInstance().setDevModal(false);
        DBConfigure.getInstance().setUseDBPool(true);
        DBConfigure.getInstance().setTrace(0);
        DBConfigure.getInstance().setDumpinfo(0);
        Connection conn = DBManager.getDBConn();

        ClearDBResource.closeConnection(conn);
      }
      catch(Exception ex)
      {
        ex.printStackTrace();
      }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?