ConnectionCreater.java------使用JDBC创建数据库连接通用类(第一版)

    xiaoxiao2023-10-29  142

    package cn.subanfaner.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; /** * <h3>默认数据库类型:mysql、oracle、sqlserver、postgresql</h3> * <h3>我们可以使用以下方法创建数据库连接(所有创建链接的方法都可以保证驱动不会被重复注册):</h3> * * <blockquote> * <table border="1" cellspacing="0" cellpadding="4" summary=""> * <tr style="background-color:#ccccff"> * <th align="left">方法</th> * <th align="left">用途</th> * </tr> * * <tr valign="top"> * <td>getMysqlConnection()</td> * <td>获取Mysql数据库连接</td> * </tr> * * <tr valign="top" style="background-color:#eeeeff"> * <td>getOracleConnection()</td> * <td>获取Oracle数据库连接</td> * </tr> * * <tr valign="top"> * <td>getSqlserverConnection()</td> * <td>获取Sqlserver数据库连接</td> * </tr> * * <tr valign="top" style="background-color:#eeeeff"> * <td>getPostgresqlConnection()</td> * <td>获取Postgresql数据库连接</td> * </tr> * * <tr valign="top"> * <td>getDefalutConnectionByType()</td> * <td>根据默认数据库类型获取连接</td> * </tr> * * <tr valign="top" style="background-color:#eeeeff"> * <td>getConnectionByDriver()</td> * <td>根据数据库驱动获取连接</td> * </tr> * </table> * </blockquote> * <h3>提供关闭资源的方法:close(AutoCloseable... closeables)</h3> * * @author dyw * @date 2019年5月25日 上午11:29:27 */ public final class ConnectionCreater { /** 常用数据库类型 */ private static final String MYSQL = "mysql"; private static final String ORACLE = "oracle"; private static final String SQLSERVER = "sqlserver"; private static final String POSTGRESQL = "postgresql"; /** 数据库类型到数据库驱动映射集合 */ private static Map<String, String> TYPE_DRIVER_MAP = new HashMap<String, String>(); /** 标记已注册驱动 */ private static Map<String, String> DRIVER_REGIDITED = new HashMap<String, String>(); static { initTypeDriverMap(); } /** * 初始化类型驱动集合 */ private static void initTypeDriverMap() { TYPE_DRIVER_MAP.put(MYSQL, "com.mysql.jdbc.Driver"); TYPE_DRIVER_MAP.put(ORACLE, "oracle.jdbc.driver.OracleDriver"); TYPE_DRIVER_MAP.put(SQLSERVER, "com.microsoft.jdbc.sqlserver.SQLServerDriver"); TYPE_DRIVER_MAP.put(POSTGRESQL, "org.postgresql.Driver"); } /** * 建立mysql连接 * * @param url 连接地址 * @param user 数据库用户名 * @param password 数据库密码 * @return 数据库连接 */ public static Connection getMysqlConnection(String url, String user, String password) { return getDefalutConnectionByType(MYSQL, url, user, password); } /** * 建立oracle连接 * * @param url 连接地址 * @param user 数据库用户名 * @param password 数据库密码 * @return 数据库连接 */ public static Connection getOracleConnection(String url, String user, String password) { return getDefalutConnectionByType(ORACLE, url, user, password); } /** * 建立sqlserver连接 * * @param url 连接地址 * @param user 数据库用户名 * @param password 数据库密码 * @return 数据库连接 */ public static Connection getSqlserverConnection(String url, String user, String password) { return getDefalutConnectionByType(SQLSERVER, url, user, password); } /** * 建立postgresql连接 * * @param url 连接地址 * @param user 数据库用户名 * @param password 数据库密码 * @return 数据库连接 */ public static Connection getPostgresqlConnection(String url, String user, String password) { return getDefalutConnectionByType(POSTGRESQL, url, user, password); } /** * 建立数据库连接(该方法只支持几个默认数据库类型的链接创建),非默认数据库创建链接请使用getConnectionByDriver()方法 * * @param dbType 数据库类型:mysql、oracle、sqlserver、postgresql * @param url 连接地址 * @param user 数据库用户名 * @param password 数据库密码 * @return 数据库连接 */ public static Connection getDefalutConnectionByType(String dbType, String url, String user, String password) { Connection conn = null; if (!stringIsNullOrBlank(dbType)) { if (regeditDefalutDriverByType(dbType.toLowerCase())) { try { conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } } } return conn; } /** * 建立数据库连接 * * @param driver 数据库驱动 * @param url 连接地址 * @param user 数据库用户名 * @param password 数据库密码 * @return 数据库连接 */ public static Connection getConnectionByDriver(String driver, String url, String user, String password) { Connection conn = null; if (!stringIsNullOrBlank(driver)) { if (regeditDriverByDriver(driver)) { try { conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } } } return conn; } /** * 关闭资源 * * @param closeables */ public static void close(AutoCloseable... closeables) { if (closeables.length != 0) { for (AutoCloseable temp : closeables) { try { if (temp != null) { temp.close(); } } catch (Exception e) { e.printStackTrace(); } finally { temp = null; } } } } /** * 注册数据库驱动 * * @param dbType 数据库类型:默认类型mysql、oracle、sqlserver、postgresql * @return */ private static boolean regeditDefalutDriverByType(String dbType) { boolean success = true; try { if (!DRIVER_REGIDITED.containsKey(dbType)) {// 指定类型驱动未加载 String driver = TYPE_DRIVER_MAP.get(dbType); if (!stringIsNullOrBlank(driver)) {// 指定类型数据库驱动存在 Class.forName(driver); DRIVER_REGIDITED.put(dbType, driver); printToConsole("注册数据库驱动:" + driver); } else {// 指定类型数据库驱动不存在 success = false; printToConsole("【错误提示】你所指定的数据库类型\" " + dbType + "\"不是默认数据库类型(mysql、oracle、sqlserver、postgresql)"); } } } catch (ClassNotFoundException e) {// 驱动加载出现异常 success = false; e.printStackTrace(); } return success; } /** * 数据库驱动注册 * * @param driver 数据库驱动 * @return */ private static boolean regeditDriverByDriver(String driver) { boolean success = true; try { if (!DRIVER_REGIDITED.containsValue(driver)) {// 指定驱动未加载 String dbType = getDatabaseTypeFromDriver(driver); Class.forName(driver); DRIVER_REGIDITED.put(dbType, driver); printToConsole("注册数据库驱动:" + driver); } } catch (ClassNotFoundException e) { success = false; e.printStackTrace(); } return success; } /** * 获取数据库类型 * * @param driver 数据库驱动 * @return 默认数据库返回mysql、oracle、sqlserver、postgresql中的一个;非默认数据库返回驱动全类名 */ private static String getDatabaseTypeFromDriver(String driver) { if (isDefalutDatabaseDriver(driver)) { if (driver.contains(MYSQL)) return MYSQL; else if (driver.contains(ORACLE)) return ORACLE; else if (driver.contains(SQLSERVER)) return SQLSERVER; else return POSTGRESQL; } else { return driver; } } /** * 判断是否为默认数据库驱动:mysql、oracle、sqlserver、postgresql * * @param driver 数据库驱动 * @return 如果是默认数据库类型返回true,否则false */ private static boolean isDefalutDatabaseDriver(String driver) { if (driver.contains(MYSQL) || driver.contains(ORACLE) || driver.contains(SQLSERVER) || driver.contains(POSTGRESQL)) { return true; } return false; } /** * 判断字符串是为null或是空字符串 * * @param str * @return */ private static boolean stringIsNullOrBlank(String str) { return str == null ? true : str.equals(""); } /** * 打印到控制台 * * @param obj */ private static void printToConsole(Object obj) { System.out.println(obj); } }
    最新回复(0)