根据SQL获取元数据信息
最后更新:2024-05-14 05:30:01
|
状态:未完成
根据SQL获取元数据信息
service.metadata(String sql, boolean comment)
comment:表示是否需要获取列注释,需要数据库官方驱动的支持
因为查询列注释需要解析列属性表,并查询系统表,所以会有额外耗时。
如果需要获取表结构应该用service.metadata().table("表名")//返回列、索引等全部表结构
或service.metadata().columns("表名")只返回列
service.metadata(String sql, boolean comment)
comment:表示是否需要获取列注释,需要数据库官方驱动的支持
因为查询列注释需要解析列属性表,并查询系统表,所以会有额外耗时。
如果需要获取表结构应该用service.metadata().table("表名")//返回列、索引等全部表结构
或service.metadata().columns("表名")只返回列
同时每个查询结果DataRow/DataSet中已自带了元数据信息DataRow.getMetadata()可以返回
/** * 根据sql获取列结构, 如果有表名应该调用metadata().columns(table);或metadata().table(table).getColumns() * @param sql sql * @param comment 是否需要列注释 * @param condition 是否需要拼接查询条件, 如果需要会拼接where 1=0 条件(默认不添加,通常情况下SQL自带查询条件,给参数赋值NULL达到相同的效果) * @return LinkedHashMap */ LinkedHashMap<String, Column> metadata(String sql, boolean comment, boolean condition);
// 1直接获取元数据 //sql server 列元数据中不返回表名,所以查不到注释 LinkedHashMap<String,Column> columns = service.metadata("SELECT ID AS USER_ID, ID AS ID, CODE AS USER_CODE FROM CRM_USER WHERE ID = :ID "); for(Column column:columns.values()){ System.out.println(column); } //2.获取表结构的同时获取列数据 Table tab = service.metadata().table("CRM_USER"); columns = tab.getColumns(); for(Column column:columns.values()){ System.out.println(column); } //3.通过查询结果获取元数据 DataSet set = service.querys("SELECT F.ID AS '用户编号', M.ID AS ID, M.CODE AS USER_CODE FROM CRM_USER AS M LEFT JOIN CRM_USER AS F ON M.ID = F.ID"); columns = set.getMetadatas(); for(Column column:columns.values()){ System.out.println(column); }