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

📄 databasemetadata.java

📁 一个Java持久层类库
💻 JAVA
字号:
//$Id: DatabaseMetadata.java 10726 2006-11-06 14:50:05Z max.andersen@jboss.com $package org.hibernate.tool.hbm2ddl;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.hibernate.HibernateException;import org.hibernate.exception.JDBCExceptionHelper;import org.hibernate.exception.SQLExceptionConverter;import org.hibernate.mapping.Table;import org.hibernate.dialect.Dialect;import org.hibernate.util.StringHelper;/** * JDBC database metadata * @author Christoph Sturm, Teodor Danciu */public class DatabaseMetadata {		private static final Logger log = LoggerFactory.getLogger(DatabaseMetadata.class);		private final Map tables = new HashMap();	private final Set sequences = new HashSet();	private final boolean extras;	private DatabaseMetaData meta;	private SQLExceptionConverter sqlExceptionConverter;	public DatabaseMetadata(Connection connection, Dialect dialect) throws SQLException {		this(connection, dialect, true);	}	public DatabaseMetadata(Connection connection, Dialect dialect, boolean extras) throws SQLException {		sqlExceptionConverter = dialect.buildSQLExceptionConverter();		meta = connection.getMetaData();		this.extras = extras;		initSequences(connection, dialect);	}	private static final String[] TYPES = {"TABLE", "VIEW"};	public TableMetadata getTableMetadata(String name, String schema, String catalog, boolean isQuoted) throws HibernateException {		Object identifier = identifier(catalog, schema, name);		TableMetadata table = (TableMetadata) tables.get(identifier);		if (table!=null) {			return table;		}		else {						try {				ResultSet rs = null;				try {					if ( (isQuoted && meta.storesMixedCaseQuotedIdentifiers())) {						rs = meta.getTables(catalog, schema, name, TYPES);					} else if ( (isQuoted && meta.storesUpperCaseQuotedIdentifiers()) 						|| (!isQuoted && meta.storesUpperCaseIdentifiers() )) {						rs = meta.getTables( 								StringHelper.toUpperCase(catalog), 								StringHelper.toUpperCase(schema), 								StringHelper.toUpperCase(name), 								TYPES 							);					}					else if ( (isQuoted && meta.storesLowerCaseQuotedIdentifiers())							|| (!isQuoted && meta.storesLowerCaseIdentifiers() )) {						rs = meta.getTables( 								StringHelper.toLowerCase(catalog), 								StringHelper.toLowerCase(schema), 								StringHelper.toLowerCase(name), 								TYPES 							);					}					else {						rs = meta.getTables(catalog, schema, name, TYPES);					}										while ( rs.next() ) {						String tableName = rs.getString("TABLE_NAME");						if ( name.equalsIgnoreCase(tableName) ) {							table = new TableMetadata(rs, meta, extras);							tables.put(identifier, table);							return table;						}					}										log.info("table not found: " + name);					return null;				}				finally {					if (rs!=null) rs.close();				}			}			catch (SQLException sqle) {				throw JDBCExceptionHelper.convert(                        sqlExceptionConverter,				        sqle,				        "could not get table metadata: " + name					);			}		}	}	private Object identifier(String catalog, String schema, String name) {		return Table.qualify(catalog,schema,name);	}	private void initSequences(Connection connection, Dialect dialect) throws SQLException {		if ( dialect.supportsSequences() ) {			String sql = dialect.getQuerySequencesString();			if (sql!=null) {					Statement statement = null;				ResultSet rs = null;				try {					statement = connection.createStatement();					rs = statement.executeQuery(sql);							while ( rs.next() ) {						sequences.add( rs.getString(1).toLowerCase().trim() );					}				}				finally {					if (rs!=null) rs.close();					if (statement!=null) statement.close();				}							}		}	}	public boolean isSequence(Object key) {		if (key instanceof String){			String[] strings = StringHelper.split(".", (String) key);			return sequences.contains( strings[strings.length-1].toLowerCase());		}		return false;	} 	public boolean isTable(Object key) throws HibernateException { 		if(key instanceof String) {			Table tbl = new Table((String)key);			if ( getTableMetadata( tbl.getName(), tbl.getSchema(), tbl.getCatalog(), tbl.isQuoted() ) != null ) { 				return true; 			} else { 				String[] strings = StringHelper.split(".", (String) key); 				if(strings.length==3) {					tbl = new Table(strings[2]);					tbl.setCatalog(strings[0]);					tbl.setSchema(strings[1]);					return getTableMetadata( tbl.getName(), tbl.getSchema(), tbl.getCatalog(), tbl.isQuoted() ) != null; 				} else if (strings.length==2) {					tbl = new Table(strings[1]);					tbl.setSchema(strings[0]);					return getTableMetadata( tbl.getName(), tbl.getSchema(), tbl.getCatalog(), tbl.isQuoted() ) != null; 				} 			} 		} 		return false; 	} 		public String toString() {		return "DatabaseMetadata" + tables.keySet().toString() + sequences.toString();	}}

⌨️ 快捷键说明

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