⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbutils.java

📁 经典的java初学者的材料里面有最基本的java的应用
💻 JAVA
字号:
package addressbook.model;
/**
 * @todo:
 *  <p> Title: 公共类 </p>
 * <p> Description: 公共类---数据库连接调用 </p>
 * <p> Copyright: Copyright (c) 2004 </p>
 * <p> Company: fxm </p>
 * @author liaohh
 * @version 2.0
 */
import java.sql.*;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public final class DBUtils {

	private static Log log = LogFactory.getLog(DBUtils.class);

	public static final int DATABASE_UNKNOWN = 0;

	public static final int DATABASE_GENERAL = 1;

	public static final int DATABASE_NOSCROLL = 2;

	public static final int DATABASE_ORACLE = 10;

	public static final int DATABASE_SQLSERVER = 11;

	public static final int DATABASE_DB2 = 12;

	public static final int DATABASE_SYBASE = 13;

	public static final int DATABASE_IMFORMIX = 14;

	public static final int DATABASE_MYSQL = 15;

	public static final int DATABASE_POSTGRESQL = 16;

	public static final int DATABASE_HSQLDB = 17;

	public static final int DATABASE_ACCESS = 18;

	private static int databaseType = DATABASE_UNKNOWN;

	private static boolean useDatasource = false;

	private static int maxTimeToWait = 2000;// 2 秒钟

	private static int minutesBetweenRefresh = 30;// 30 分钟

	private static DBConnectionManager connectionManager = null;

	private static DataSource dataSource = null;

	private static long lastGetConnectionTime = 0;

	private static long lastCloseAllConnectionsTime = 0;

	static {
		DBOptions option = new DBOptions();
		databaseType = option.databaseType;
		if (databaseType != DATABASE_UNKNOWN) {
			log.info(" 数据库类型 " + databaseType);
		}
		if (option.useDatasource) {
			useDatasource = true;
			try {
				javax.naming.Context context = new javax.naming.InitialContext();
				// sample data source = java:comp/env/jdbc/MysqlDataSource
				dataSource = (DataSource) context.lookup(option.datasourceName);
				log.info("DBUtils : 使用数据库 = " + option.datasourceName);
			} catch (javax.naming.NamingException e) {
				log.error("不能得到数据库 name = " + option.datasourceName, e);
			}
		} else {
			useDatasource = false;
			maxTimeToWait = option.maxTimeToWait;
			minutesBetweenRefresh = option.minutesBetweenRefresh;
			connectionManager = DBConnectionManager.getInstance(option);
			log.info("DBUtils : 使用内置连接 (MAX_TIME_TO_WAIT = " + maxTimeToWait
					+ ", MINUTES_BETWEEN_REFRESH = " + minutesBetweenRefresh
					+ ")");
		}
		log.info("DBUtils 初始化成功. ");
	}

	private DBUtils() {// so cannot new an instance
	}

	public static int getDatabaseType() {
		if (databaseType == DATABASE_UNKNOWN) {
			Connection connection = null;
			try {
				connection = DBUtils.getConnection();
				DatabaseMetaData dbmd = connection.getMetaData();
				String databaseName = dbmd.getDatabaseProductName()
						.toLowerCase();
				if (databaseName.indexOf("oracle") != -1) {
					databaseType = DATABASE_ORACLE;
				} else if (databaseName.indexOf("sql server") != -1) {
					databaseType = DATABASE_SQLSERVER;
				} else if (databaseName.indexOf("mysql") != -1) {
					databaseType = DATABASE_MYSQL;
				} else if (databaseName.indexOf("postgresql") != -1) {
					databaseType = DATABASE_POSTGRESQL;
				} else if (databaseName.indexOf("hsql") != -1) {
					databaseType = DATABASE_HSQLDB;
				} else {
					databaseType = DATABASE_GENERAL;
				}
				log.info("自动检查数据库类型:数据库类型 = " + databaseType);
			} catch (Exception ex) {
				log.error("不能得到数据库的类型", ex);
			} finally {
				DBUtils.closeConnection(connection);
			}
		}
		return databaseType;
	}

	public static Connection getConnection() throws SQLException {

		long now = System.currentTimeMillis();
		lastGetConnectionTime = now;

		if (now - lastCloseAllConnectionsTime > 1000*60
				* minutesBetweenRefresh) {
			boolean isBalance = closeAllConnections();
			if (isBalance == false) {
				try {

					Thread.sleep(2000);
					log.debug("DBUtils: 等待2秒钟来注销和关闭数据库连接");
				} catch (Exception ex) {
				}
			}
		}

		Connection conection = null;

		if (useDatasource) {
			if (dataSource != null) {
				conection = dataSource.getConnection();
			}
		} else {
			if (connectionManager != null) {
				conection = connectionManager.getConnection(maxTimeToWait);
			} else {
				log.fatal("注意: DBUtils.connectionManager == null");
			}
		}

		if (conection == null) {
			throw new SQLException("DBUtils: 不能从连接池中获得数据库连接!");
		}
		return conection;
	}

	public static boolean closeAllConnections() {
		log.debug("调用DBUtils.closeAllConnections来关闭所有的数据库连接");
		boolean retValue = true;// balance (default)
		lastCloseAllConnectionsTime = System.currentTimeMillis();
		if (useDatasource) {
			if (dataSource != null) {
			}
		} else {
			if (connectionManager != null) {
				retValue = connectionManager.release();
			} else {
				log.fatal("注意: DBUtils.connectionManager == null");
			}
		}
		return retValue;
	}

	public static void closeConnection(Connection connection) {
		if (connection == null)
			return;

		if (useDatasource) {
			try {
				connection.close();
			} catch (SQLException e) {
				log.error("DBUtils: 不能关闭数据库连接", e);
			}
		} else {
			connectionManager.freeConnection(connection);
		}
	}

	public static void resetStatement(Statement statement) {
		if (statement != null) {
			try {
				statement.setMaxRows(0);
			} catch (SQLException e) {
				log.error("DBUtils: 不能重置stmt 的最大行数", e);
			}

			try {
				statement.setFetchSize(0);
			} catch (SQLException sqle) {
				System.out.println(sqle.getMessage());
			}
		}
	}

	public static void closeStatement(Statement statement) {
		try {
			if (statement != null)
				statement.close();
		} catch (SQLException e) {
			log.error("DBUtils: 不能关闭 statement.", e);
		}
	}

	public static void closeResultSet(ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
		} catch (SQLException e) {
			log.error("DBUtils:不能关闭 resultset.", e);
		}
	}

	public static void main(String[] args) {
		try {
			Connection conn = DBUtils.getConnection();
			Statement st = conn.createStatement();
			ResultSet rs = st.executeQuery("select * from ADCD_B");
			
			/*System.out.println(rs);
			while (rs.next()) {
				System.out.println(rs.getString(1));
			}
			DBUtils.closeResultSet(rs);
			DBUtils.closeStatement(st);*/

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

⌨️ 快捷键说明

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