閱讀98 返回首頁    go 技術社區[雲棲]


數據庫連接類

數據庫連接類

 

/*
 * Created on 2005-11-6
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.yanek.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.PropertyResourceBundle;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class Database {
 /**
  * 數據庫訪問URL
  */
 private static String url;

 /**
  * 數據庫驅動
  */
 private static String driver;

 /**
  * 數據庫訪問用戶名
  */
 private static String username;

 /**
  * 數據庫訪問口令
  */
 private static String password;

 /**
  * 訪問類型
  */
 private static String type;

 /**
  * 數據源名稱
  */
 private static String datasource;

 /**
  * 配置文件名稱
  */
 private final static String fileName = "database";

 private static ThreadLocal connection = new ThreadLocal();

 static {
  config();
 }

 private static void config() {
  // 讀取係統配置
  PropertyResourceBundle resourceBundle = (PropertyResourceBundle) PropertyResourceBundle
    .getBundle(fileName);
  // 將係統設置賦值給類變量
  Enumeration enu = resourceBundle.getKeys();
  while (enu.hasMoreElements()) {
   String propertyName = enu.nextElement().toString();
   if (propertyName.equals("database.url"))
    url = resourceBundle.getString("database.url");
   if (propertyName.equals("database.driver"))
    driver = resourceBundle.getString("database.driver");
   if (propertyName.equals("database.username"))
    username = resourceBundle.getString("database.username");
   if (propertyName.equals("database.password"))
    password = resourceBundle.getString("database.password");
   if (propertyName.equals("database.type"))
    type = resourceBundle.getString("database.type");
   if (propertyName.equals("database.datasource"))
    datasource = resourceBundle.getString("database.datasource");
  }

 }

 /**
  * 取得數據庫連接
  *
  * @return
  * @throws SQLException
  */
 public synchronized static java.sql.Connection getConnection()
   throws SQLException {
  Connection con = (Connection) connection.get();
  if (con != null && !con.isClosed()) {
   return con;
  }
  if ("pooled".equalsIgnoreCase(type)) {
   // 從JNDI中取得數據源
   try {
    // 此處對於不同的應用服務器,對env傳入不同
    Hashtable env = new Hashtable();
    // 此處對於不同的應用服務器,對env傳入不同
    Context ctx = new InitialContext(env); // 從命名係統中獲取 DataSource
    // 工廠對象
    DataSource dataSource = (DataSource) ctx.lookup(datasource);
    con = dataSource.getConnection();
    connection.set(con);
    return con;
   } catch (NamingException e) {
    e.printStackTrace();
   }
  } else {
   // 直接使用JDBC驅動連接
   try {
    Class providerClass = Class.forName(driver);
    con = DriverManager.getConnection(url, username, password);
    con.setAutoCommit(false);
    connection.set(con);
    return con;

   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   }
  }
  return null;
 }

 public static void commit() {
  Connection con = (Connection) connection.get();
  try {
   con.commit();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }

 public static void rollback() {
  Connection con = (Connection) connection.get();
  try {
   con.rollback();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }

 public synchronized static void releaseConnection(Connection connection) {

  try {
   if (connection != null && !connection.isClosed())
    connection.close();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  connection = null;
 }

 public static void main(String[] args) {

  try {

   System.out.println("conn:" + Database.getConnection());

  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 

database.property文件

 

database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost/test?user=root&password=root&useUnicode=true&characterEncoding=gbk

最後更新:2017-04-02 03:13:28

  上一篇:go jdbc封裝工具類
  下一篇:go .NET中WinForm表單的快速建立