java获取数据库的库、表、字段信息
2017-02-06 17:20
465 查看
public class JDBCUtil { /** * 功能描述:获取JDBC链接 * @author qiaobin * @date 2016/9/7 15:06 * @param dataSourceInfo 数据源 * @param dbName 数据库 */ public static Connection getConnection(DataSourceInfo dataSourceInfo, String dbName) throws Exception{ Connection con = null; try { Class.forName(dataSourceInfo.getDriverName()); con = DriverManager.getConnection(getUrl(dataSourceInfo, dbName), dataSourceInfo.getUser(), dataSourceInfo.getPassword()); } catch (Exception e) { log.error(formatLog("getConnection", null, e.getMessage(), "param {dataSourceInfo = %s}", dataSourceInfo.toString() )); throw e; } return con; } /** * 功能描述:获取连接的数据库 * @author qiaobin * @date 2016/9/7 15:06 * @param conn */ public static List<String> getDatabases(Connection conn, String type) throws Exception{ List<String> list = Lists.newArrayList(); try { DatabaseMetaData dbMetaData = conn.getMetaData(); if (type.equals("ORACLE")) { ResultSet rs=dbMetaData.getSchemas(); while(rs.next()){ list.add(rs.getString("TABLE_SCHEM")); } } else { ResultSet rs=dbMetaData.getCatalogs(); while(rs.next()){ list.add(rs.getString("TABLE_CAT")); } } } catch (Exception e) { log.error(formatLog("getConnection", null, e.getMessage(), "", "")); throw e; } return list; } /** * 功能描述:获取数据库下所有表,必须指定数据库 * @author qiaobin * @date 2016/9/7 15:06 * @param conn */ public static List<String> getTables(Connection conn, DataSourceInfo ds, String dbName) throws Exception{ List<String> list = Lists.newArrayList(); ResultSet tables; try { DatabaseMetaData dbMetaData = conn.getMetaData(); if (ds.getDsType().equals("ORACLE")) tables = dbMetaData.getTables(null, dbName, "%", new String[]{"TABLE"}); else tables = dbMetaData.getTables(null, null, null, new String[]{"TABLE"}); while (tables.next()) { if (ds.getDsType().equals("ORACLE")) list.add(tables.getString("TABLE_NAME")); else list.add(tables.getString(3)); } } catch (Exception e) { log.error(formatLog("getTables", null, e.getMessage(), "", "")); throw e; } return list; } /** * 功能描述:获取表下所有字段,必须指定数据库 * @author qiaobin * @date 2016/9/7 15:06 * @param conn */ public static Map<String, String> getColumns(Connection conn, String tableName) throws Exception{ Map<String, String> result = Maps.newConcurrentMap(); PreparedStatement pst = null; try { if (StringUtils.isNotEmpty(tableName)) { DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs = dbmd.getColumns(null, "%", tableName, "%"); while (rs.next()) { result.put(rs.getString("COLUMN_NAME"), rs.getString("TYPE_NAME")); } } } catch (Exception e) { log.error(formatLog("getColumns", null, e.getMessage(), "", "")); throw e; } finally { JdbcUtils.closeStatement(pst); } return result; } /** * 功能描述:根据数据源拼接数据库链接地址 * @author qiaobin * @date 2016/9/7 15:06 * @param ds */ public static String getUrl(DataSourceInfo ds, String dbName) { String url = ""; switch (ds.getDriverName()) { case DataSourceConst.MYSQL_DRIVERMANAGER : url = String.format("jdbc:mysql://%s:%s", ds.getHost(), ds.getPort()); if (StringUtils.isNotEmpty(dbName) && !dbName.equals("null")) url = url +"/" + dbName; url = url + "?useUnicode=true&characterEncoding=utf8"; break; case DataSourceConst.ORACLE_DRIVERMANAGER : url = String.format("jdbc:oracle:thin:@%s:%s:%s", ds.getHost(), ds.getPort(), ds.getSid()); // if (StringUtils.isNotEmpty(dbName) && !dbName.equals("null")) // url = url +":" + dbName; break; case DataSourceConst.HIVE_DRIVERMANAGER : url = String.format("jdbc:hive2://%s:%s", ds.getHost(), ds.getPort()); if (StringUtils.isNotEmpty(dbName) && !dbName.equals("null")) url = url +"/" + dbName; break; case DataSourceConst.IHYPERDB_DRIVERMANAGER : url = String.format("jdbc:mdss://%s:%s", ds.getHost(), ds.getPort()); if (StringUtils.isNotEmpty(dbName) && !dbName.equals("null")) url = url +":" + dbName; break; } return url; } } 其中用的实体 public class DataSourceInfo{ /* * 主键 * */ @Id private String dsId; /* * 连接名称 * */ @Column(name="name") private String dsName; /* * 数据库类型 * */ @Column(name="DSTYPE") private String dsType; /* * 驱动 * */ @Column(name="drivername") private String driverName; /* * 地址 * */ @Column(name="host") private String host; /* * 端口 * */ @Column(name="port") private int port; /* * 用户名 * */ @Column(name="user") private String user; /* * 密码 * */ @Column(name="password") private String password; /* * Oracle连接名 * */ @Column(name="sid") private String sid; /* * 默认连接数据库 * */ @Column(name="defaultdb") private String defaultDatabase; }
相关文章推荐
- Java获取数据库的表中各字段的字段名等相关信息-很详细
- java程序中获取数据库date字段时的日期格式问题
- java将数据库结果集封装成Map, java获取数据库字段 (修定)
- Java获取数据库表列信息、索引信息、存储过程等信息
- 获取mysql表中字段备注信息以及选中数据库中表的备注信息
- DatabaseMetaData获取数据库信息和表信息(表的列名,类型,主键等)SQL java
- 使用Java获取任意数据库的信息
- java获取实体字段描述信息
- java代码里获取xml文件里的数据库配置信息
- sql2005 根据表名获取数据库表各字段信息
- 获取数据库表字段描述 类型 大小等信息
- java导出数据库的结构 表结构 字段信息 主键
- 构造From窗体获取数据库数据,去除数据库中无用信息,并赋值给字段,最后画出图
- Sql :获取数据库所有表及其字段名称、类型、长度 (也可以指定单张或若干张表的详细信息。。。)
- JDBC获取数据库表字段信息
- java获取数据库的列名,类型等信息
- 【java工具】使用jdbc访问数据库获取某个存储过程信息及下面参数信息
- Java 获取数据库所有表基本信息和表中的所有列基本信息代码
- 通过jdbc获取数据库表字段信息