您的位置:首页 > 编程语言 > Java开发

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: