根据url获取mysql数据库相关信息

业务场景:

根据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);
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方大拿拿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值