业务场景:
根据url获取mysql数据库相关信息:
1.获取数据库列表(如:下属库信息)
2.根据数据库获取表信息
3.根据表获取字段信息
接口方法:
/**
* 根据连接串获取数据库列表
* @param url 连接串
* @param userName 用户名
* @param password 密码
* @return 数据库名称列表
*/
List<String> databaseList(String url, String userName, String password);
/**
* 根据数据库获取表
* @param databaseName 数据库名称
* @param url 连接串
* @param userName 用户名
* @param password 密码
* @return 表
*/
List<String> tableList(String databaseName,String url, String userName, String password);
/**
* 根据表获取字段
* @param databaseName 数据库名称
* @param tableName 表名
* @param url 连接串
* @param userName 用户名
* @param password 密码
* @return 字段
*/
List<String> columnList(String databaseName,String tableName,String url, String userName, String password);
impl:业务实现
/**
* 根据连接串获取数据库列表
* @param url 连接串
* @param userName 用户名
* @param password 密码
* @return 数据库名称列表
*/
@Override
public List<String> databaseList(String url, String userName, String password) {
List<String> list = new ArrayList<>();
try {
String driver = "com.mysql.cj.jdbc.Driver";
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, userName, password);
PreparedStatement statement = connection.prepareStatement("SHOW DATABASES");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()){
String database = resultSet.getString("Database");
list.add(database);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 根据数据库获取表
* @param databaseName 数据库名称
* @param url 连接串
* @param userName 用户名
* @param password 密码
* @return 表
*/
@Override
public List<String> tableList(String databaseName, String url, String userName, String password) {
List<String> list = new ArrayList<>();
try {
String[] split = url.split("/");
String newUrl = split[0] + "//" + split[2]+"/"+databaseName;
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(newUrl, userName, password);
PreparedStatement preparedStatement = connection.prepareStatement("SHOW TABLES");
ResultSet result = preparedStatement.executeQuery();
while (result.next()){
String tableName = result.getString("Tables_in_" + databaseName);
list.add(tableName);
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
/**
* 根据表获取字段
* @param databaseName 数据库名称
* @param tableName 表名
* @param url 连接串
* @param userName 用户名
* @param password 密码
* @return 字段
*/
@Override
public List<String> columnList(String databaseName,String tableName, String url, String userName, String password) {
List<String> list = new ArrayList<>();
try {
String[] split = url.split("/");
String newUrl = split[0] + "//" + split[2]+"/"+databaseName;
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(newUrl, userName, password);
PreparedStatement preparedStatement = connection.prepareStatement("SHOW COLUMNS FROM "+tableName);
ResultSet result = preparedStatement.executeQuery();
while (result.next()){
list.add(result.getString("Field"));
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
controller:
/**
* @PathVariable :配合 get 方法使用
* @RequestParam或不写 :配合 post 方法使用
*/
@ApiOperation(value = "根据数据源获取数据库列表")
@GetMapping("/databaseList")
public List<String> databaseList(String url,String username,String password){
return mysqlDataCollectionService.databaseList(url,username,password);
}
@ApiOperation(value = "根据数据库名查询表")
@GetMapping("/tableList")
public List<String> tableList(String url,String username,String password,String databaseName){
return mysqlDataCollectionService.tableList(databaseName,url,username,password);
}
@ApiOperation(value = "根据表名查询字段")
@GetMapping("/columnList")
public List<String> columnList(String databaseName,String tableName,String url, String userName, String password){
return mysqlDataCollectionService.columnList(databaseName,tableName,url,userName,password);
}