JDBC获取数据库信息
2013-11-27 13:42
295 查看
当同一个项目部署到不同数据库环境时,程序中涉及sql语句执行时,由于各种数据库的差异,可能会产生异常。则就需要获取数据库信息做适当处理。
public class DBUtils { private static Log logger = LogFactory.getLog(DBUtils.class); private static String dbName; private static final String DBTYPE_DB2 = "DB2"; private static final String DBTYPE_SYBASE = "Sybase"; private static final String DBTYPE_ORACLE = "Oracle"; private static final String DBTYPE_SQLSERVER = "SqlServer"; private static final String DBTYPE_MYSQL = "MySQL"; /* private static Cache dbTypeJudgeCache = DBCache.DBTypeJudgeCache;*/ private static String getDatabaseProductName() { WebApplicationContext webContext = (WebApplicationContext)ComponentFactory.getApplicationContext(); DataSource ds = (DataSource) webContext.getBean("dataSource"); if (dbName != null) { return dbName; } Connection con = null; try { con = DataSourceUtils.getConnection(ds); } catch (DataAccessException ex) { logger.error("获取数据库连接失败", ex); } if (con != null) { try { DatabaseMetaData dbmd = con.getMetaData(); if (dbmd != null) { dbName = dbmd.getDatabaseProductName(); if (dbName != null && dbName.startsWith("DB2/")) { dbName = DBUtils.DBTYPE_DB2; } else if (dbName != null && dbName.startsWith("Oracle")) { dbName = DBUtils.DBTYPE_ORACLE; } else if (dbName != null && dbName.startsWith("Microsoft SQL Server")) { dbName = DBUtils.DBTYPE_SQLSERVER; } else if (dbName != null && (dbName.equals("Adaptive Server Enterprise") || dbName .equals("Adaptive Server Anywhere"))) { dbName = DBUtils.DBTYPE_SYBASE; } else if (dbName != null && dbName.startsWith("MySQL")) { dbName = DBUtils.DBTYPE_MYSQL; } } else { logger.warn("获取数据库类型出错"); } } catch (SQLException se) { logger.error("获取数据库类型出错", se); } finally { DataSourceUtils.closeConnectionIfNecessary(con, ds); } } return dbName; } private static String getDbType() { String dbType = null; try { dbType = DBUtils.getDatabaseProductName(); } catch (Exception e) { // 异常不处理; } if (dbType == null) { dbType = ""; } else { dbType = dbType.trim(); } return dbType; } // 下面四个方法最好能有更好的办法使每次进来的时候只比较一次,不用每次进来都比较 public static boolean dbTypeIsDB2() { Boolean is_db2 = new Boolean(false); logger.debug("使用CACHE前 " + is_db2); is_db2 = new Boolean(DBUtils.getDbType().equalsIgnoreCase(DBUtils.DBTYPE_DB2)); return is_db2.booleanValue(); } public static boolean dbTypeIsORACLE() { Boolean is_oracle = new Boolean(false); is_oracle = new Boolean(DBUtils.getDbType().equalsIgnoreCase(DBUtils.DBTYPE_ORACLE)); return is_oracle.booleanValue(); } public static boolean dbTypeIsSYBASE() { Boolean is_sybase = new Boolean(false); is_sybase = new Boolean(DBUtils.getDbType().equalsIgnoreCase(DBUtils.DBTYPE_SYBASE)); return is_sybase.booleanValue(); } public static boolean dbTypeIsSQLSERVER() { Boolean is_sqlserver = new Boolean(false); is_sqlserver = new Boolean(DBUtils.getDbType().equalsIgnoreCase(DBUtils.DBTYPE_SQLSERVER)); return is_sqlserver.booleanValue(); } public static boolean dbTypeIsMYSQL() { Boolean is_mysql = new Boolean(false); is_mysql = new Boolean(DBUtils.getDbType().equalsIgnoreCase(DBUtils.DBTYPE_MYSQL)); return is_mysql.booleanValue(); } }
相关文章推荐
- JDBC--使用DatabaseMetaData获取数据库信息
- JDBC利用DatabaseMetaData,ResultSetMetaData获取数据库连接信息,数据库信息,表信息
- jdbc之MetaData_获取数据库信息
- JDBC获取数据库及表信息
- 使用JDBC获取各数据库的Meta信息——表以及对应的列
- JDBC获取数据库表字段信息
- 利用JDBC获取数据库表信息
- JDBC 通过从properties配置文件获取信息得到orcale数据库接口
- JDBC获取数据库表字段信息
- JDBC获取数据库各种信息
- 使用JDBC获取各数据库的Meta信息——表以及对应的列
- JDBC获取数据库各种信息
- 【java工具】使用jdbc访问数据库获取某个存储过程信息及下面参数信息
- JDBC获取数据库及表信息
- JDBC获取数据库的元数据信息
- 通过jdbc获取数据库表字段信息
- JDBC获取数据库表中字段详细信息
- C#中如何获取数据库中表的信息和列的信息
- sqlserver数据库获取数据库信息