栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

查询一个数据库中某个列名存在哪些表,哪些库

查询一个数据库中某个列名存在哪些表,哪些库

在工作中遇到这样一个场景,需要找出数据库中所有的电话号码的字段。因此写一个程序自动去获取,因为一个服务器中数据库大概有几十个,一个数据库的表平均也是几十张表,并不能通过人力去一个个查找。代码如下:

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.io.*;
import java.sql.Connection;
import java.sql.DatabasemetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/testdb")
public class Test {

    @RequestMapping(value = "/getAllDatabases", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = RequestMethod.GET)
    public void getAllDatabases() {
        String prefixUrl = "jdbc:mysql://localhost:3306/";
        String user = "root";
        String password = "password";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306", user, password);
            DatabasemetaData meta = con.getmetaData();
            ResultSet resultSet = meta.getCatalogs();
            List strings = new ArrayList<>();
            while (resultSet.next()) {
                String db = resultSet.getString("TABLE_CAT");

                DruidDataSource dataSource = new DruidDataSource();
                dataSource.setUrl(prefixUrl + db);
                dataSource.setUsername(user);
                dataSource.setPassword(password);

                Connection connection = dataSource.getConnection();
                DatabasemetaData databasemetaData = connection.getmetaData();
                String[] tableTypes = {"TABLE"};
                ResultSet tableResultSet = databasemetaData.getTables(connection.getCatalog(), null, null, tableTypes);
//                System.out.println("===============数据库名称 : "+db+" ===============");
                while (tableResultSet.next()) {
                    String table_name = tableResultSet.getString("TABLE_NAME");
//                    System.out.println(">>>>>>>>>>>>> 表名称 : "+table_name+" >>>>>>>>>>>>");
                    ResultSet columns = databasemetaData.getColumns(connection.getCatalog(), null, table_name, null);
                    while (columns.next()) {
                        String column_name = columns.getString("COLUMN_NAME");
                        if (column_name.contains("mobile") || column_name.contains("phone") || StringUtils.equalsIgnoreCase("phone", column_name)) {
//                            System.out.println("数据库名称:"+db+", 表名称 :"+table_name);
                            String str = "数据库名称:" + db + ", 表名称 :" + table_name + ",  字段名:" + column_name;
                            strings.add(str);
                        }
                    }
                    columns.close();
                }
                tableResultSet.close();
                connection.close();
                dataSource.close();
            }
            resultSet.close();
            con.close();
            writeFile(strings);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void writeFile(List strings) throws IOException {
        //写入中文字符时解决中文乱码问题
        File file = new File("D:/database.txt");
        file.createNewFile();
        FileOutputStream fos = new FileOutputStream(file);
        OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
        BufferedWriter bw = new BufferedWriter(osw);
        for (String arr : strings) {
            bw.write(arr + "tn");
        }

        //注意关闭的先后顺序,先打开的后关闭,后打开的先关闭
        bw.close();
        osw.close();
        fos.close();
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号