关系型数据库的元数据(MySQL,Oracle)
2020-06-07 04:43
393 查看
/** * @description 抓取MySQL, Oracle的元数据信息 * @author: ZhiWen * @create: 2019-09-29 17:45 **/ @Service public class MetaFetchImpl implements MetaFetch { @Override public List<DataTableMeta> fetch(MetaFetchDTO metaFetchDTO) { List<DataTableMeta> dataTableMetas = null; String jdbcUrl = Constants.MYSQL_JDBC_HEAD + metaFetchDTO.getUrl() + Constants.MYSQL_META_INFO; SqlUtil sqlUtil = new SqlUtil(jdbcUrl, metaFetchDTO.getUsername(), metaFetchDTO.getPassword()); String sqlText = "select t1.table_schema,\n" + " t1.table_name,\n" + " t1.column_name,\n" + " t1.ordinal_position,\n" + " t1.is_nullable,\n" + " t1.data_type,\n" + " t1.column_type,\n" + " t1.character_maximum_length,\n" + " t1.numeric_precision,\n" + " t1.numeric_scale,\n" + " t1.column_key,\n" + " t1.column_comment\n" + " from information_schema.columns t1\n" + " where t1.table_schema = '" + metaFetchDTO.getSchema() + "' and t1.table_name = '" + metaFetchDTO.getTable() + "'"; try { dataTableMetas = sqlUtil.executePageQuery(sqlText); } catch (Exception e) { e.printStackTrace(); } return dataTableMetas; } @Override public List<DataTableMeta> fetchOracle(OracleRequestDTO requestDTO) { List<DataTableMeta> dataTableMetas = null; String jdbcUrl = String.format(SqlConst.oracleUrl, requestDTO.getUrl(), requestDTO.getDatabaseName()); SqlUtil sqlUtil = new SqlUtil(jdbcUrl, Constants.ORACLE_OWNER, Constants.ORACLE_PASSWORD); String owner = requestDTO.getOwner().toUpperCase(); String tableName = requestDTO.getTableName().toUpperCase(); String sqlText = "select t1.owner,\n" + " t1.table_name,\n" + " t1.column_name,\n" + " t1.data_type,\n" + " t1.data_length,\n" + " t1.data_precision,\n" + " t1.data_scale,\n" + " t1.nullable,\n" + " t1.column_id,\n" + " t1.internal_column_id,\n" + " t1.hidden_column,\n" + " t1.virtual_column,\n" + " decode(t2.is_pk, 1, 'Y', 'N') as is_pk,\n" + " decode(t2.position, null, -1, t2.position) as position,\n" + " t1.char_length,\n" + " t1.char_used,\n" + " tcc.comments\n" + " from (select * from dba_tab_cols t\n" + " where t.owner = '" + owner + "' and t.table_name = '" + tableName + "') t1\n" + " left join all_col_comments tcc on (t1.owner = tcc.owner and t1.table_name = tcc.table_name and t1.column_name = tcc.column_name)\n" + " left join (select cu.owner, cu.table_name, cu.column_name, cu.position, 1 as is_pk\n" + " from dba_cons_columns cu, dba_constraints au\n" + " where cu.constraint_name = au.constraint_name\n" + " and cu.owner = au.owner\n" + " and au.constraint_type = 'P'\n" + " and au.table_name = '" + tableName + "'\n" + " and au.owner = '" + owner + "') t2 on (t1.column_name = t2.column_name and t1.table_name = t2.table_name and t1.owner = t2.owner)"; try { dataTableMetas = sqlUtil.executeQueryOracle(sqlText); } catch (Exception e) { e.printStackTrace(); } return dataTableMetas; } }
补充一个查询MySQL列名,类型,描述的SQL:
String sql = "SELECT\n" + " column_name,\n" + " data_type,\n" + " column_comment\n" + "FROM\n" + " information_schema. COLUMNS\n" + "WHERE\n" + " table_schema =(SELECT DATABASE())\n" + " AND table_name =?\n" + "ORDER BY\n" + " ordinal_position";
相关文章推荐
- 关系型数据库和非关系型数据库区别、oracle与mysql的区别
- 关系型数据库MySQL和SQL Server、Oracle的区别
- 关系型数据库和非关系型数据库区别、oracle与mysql的区别
- sql语法的查缺补漏(MySQL、SQL Server、Access、Oracle、DB2 等等关系型数据库)
- 关系型数据库和非关系型数据库区别、oracle与mysql的区别
- 关系型数据库(Oracle与MySQL优缺点、使用区别)
- 关系型数据库sqlserver,mysql,oracle链接数据库时所需串儿
- 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比
- 一.关系型数据库(mysql、SqlServer、Oracle、MariaDb)
- Logstash之关系型数据库(mysql或oracle)数据入ElasticSearch
- 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据
- 数据库迁移之从oracle 到 MySQL最简单的方法
- sql server,oracle,mysql 连接数据库的代码
- Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
- 总结:Oracle 和 Mysql 数据库的区别
- jdbc连接数据库(mysql,sqlserver,oracle)
- 3大数据库(Sql-Server,MySql和Oracle)的分页SQL语句实现
- python 连接数据库-设置oracle ,mysql 中文字符问题
- 查询数据库当前用户连接信息(MySQL,Oracle)
- 数据库私房菜——(扯淡的三种主流数据库 oracle、sqlserver、mysql)