😊 @ 作者: 一恍过去




java获取当前链接的数据库名称 java获取数据库字段_数据库


目录

  • 前言
  • 1、数据源公共类封装
  • 2、连接数据源
  • 3、获取数据列表
  • 4、获取指定数据库中的表
  • 5、获取指定表中字段信息
  • 6、执行SQL语句
  • 7、源码下载


前言

在Java中,“RestltData"并不是一个标准的类或接口。根据您提供的信息,我假设您指的是"ResultData”,这可能是您在项目中定义的一个自定义类或者是某个框架、库中提供的类。

通常情况下,"ResultData"是用于封装在Web应用程序中返回给客户端的结果数据的对象。它可以包含请求的处理结果、错误信息、状态码等信息,以便客户端能够根据这些信息进行适当的处理和响应。

"ResultData"的意义在于提供了一种结构化的方式来传递响应数据,并可以统一处理和封装常见的响应元素,例如成功或失败的状态、返回的数据对象、错误消息等。这样可以使代码更加清晰、可维护,并且方便客户端对返回结果进行解析和处理。

通过使用"ResultData",开发人员可以定义一致的响应格式,并将其应用于整个项目中的各个接口。这样,客户端可以更轻松地解析和处理响应,并根据状态码和消息进行相应的处理逻辑。"ResultData"在Java Web应用程序中扮演了封装和传递响应数据的角色,使得响应的处理更加一致和规范化,并提供了方便的方式来传递状态、消息和数据等信息给客户端。

通常,一个"ResultData"类可能包含以下属性:

  • 状态码(Status Code): 表示请求的处理结果状态,例如200表示成功、404表示资源未找到、500表示服务器错误等。
  • 消息(Message): 提供与状态码相关的描述性消息,用于向客户端提供更多的信息。
  • 数据(Data): 可能包含响应的业务数据对象,例如从数据库查询的结果或其他需要传递给客户端的数据。
  • 其他元数据(Additional Metadata): 可能包含其他自定义的元数据,以满足具体的业务需求。

1、数据源公共类封装

该类用于进行数据源的连接操作,作为一个公共类GetDataSourceService :

public class GetDataSourceService {
    public static DataSource getSource() {
        // 实际开发中,可以从数据库中获取数据源的配置项
        DataSource dataSource = new DataSource();
        dataSource.setId("123");
        dataSource.setName("测试");
        dataSource.setDatabaseName("template");
        dataSource.setDatabaseType(DataBaseTypeConstant.MYSQL);
        dataSource.setAddress("127.0.0.1");
        dataSource.setPort("3307");
        dataSource.setUsername("root");
        dataSource.setPassword("lhzlx");

        return dataSource;
    }
}

JdbcSourcePoolServer:

public class JdbcSourcePoolServer {

    /**
     * 在SpringBoot项目中,将数据连接池存在线程中,避免没有重新连接
     * 可以打断点进行测试,会发现只有执行‘testConn’方法时需要重新进行连接,其他几个方法都是直接在线程的connPol中获取连接
     */
    private static ConcurrentHashMap<String, HikariDataSource> connPol = new ConcurrentHashMap<>();

    /**
     * 配置数据池连接
     *
     * @param sourceId
     * @return
     */
    public static Connection getConnection(String sourceId) {
        //创建连接池
        Connection conn = null;
        HikariDataSource ds = null;
        try {
            sourceId = sourceId == null ? "" : sourceId;
            //查询当前数据源是否存在连接
            if (connPol.get(sourceId) != null) {
                conn = connPol.get(sourceId).getConnection();
            } else {
                //基本参数4个
                DataSource source = GetDataSourceService.getSource();
                //获取DruidDataSource配置
                ds = JDBCUtil.getDruidSource(source);
                //获取连接
                conn = ds.getConnection();
                //将数据源连接池存入Map中
                connPol.put(source.getId(), ds);
            }
            if (conn == null) {
                throw new Exception();
            }
            return conn;
        } catch (Exception e) {
            JDBCUtil.closeDataSource(ds);
            e.printStackTrace();
            return null;
        }
    }

    /**
     * SQL查询
     *
     * @param sourceId
     * @param sql
     * @param limit
     * @return
     */
    public static SqlResult searchSql(String sourceId, String sql, int limit) {
        //默认预览条数
        sql = sql + " limit " + limit;

        //存放字段名称
        List<String> cellHeader = null;
        //存放字段类型
        Map<String, String> colType = null;
        //存放字段值集合
        List<Object> cellList = new ArrayList<>();
        try {
            //获取链接
            Connection conn = getConnection(sourceId);
            //执行sql
            PreparedStatement pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            ResultSetMetaData metaData = rs.getMetaData();
            //遍历结果集
            while (rs.next()) {
                cellHeader = new ArrayList<>();
                colType = new HashMap<>();
                Map<Object, Object> valueMap = new HashMap<>();
                //rs的下标只能从1开始
                for (int i = 1; i <= metaData.getColumnCount(); i++) {
                    //获取字段名称,只获取一次
                    cellHeader.add(metaData.getColumnName(i));

                    //获取当前字段的类型
                    metaData.getColumnTypeName(i);
                    colType.put(metaData.getColumnName(i), metaData.getColumnTypeName(i));

                    //获取值
                    Object value = rs.getObject(i) == null ? "" : rs.getObject(i);
                    valueMap.put(i, value);
                }
                cellList.add(valueMap);
            }
            JDBCUtil.closeConnection(conn);
            rs.close();
            //封装数据返回给前端
            SqlResult resultVo = new SqlResult();
            resultVo.setCellHeader(cellHeader);
            resultVo.setCellList(cellList);
            resultVo.setColType(colType);
            return resultVo;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     * 关闭对应数据源的连接池
     *
     * @param sourceId
     */
    public static void destroyDataSource(String sourceId) {
        HikariDataSource dataSource = connPol.get(sourceId);
        if (dataSource != null) {
            connPol.remove(sourceId);
            JDBCUtil.closeDataSource(dataSource);
        }
    }
}

2、连接数据源

private static void testConn() {
	     DataSource source = GetDataSourceService.getSource();
	     Connection connection = JdbcSourcePoolServer.getConnection(source.getId());
       	 if (connection != null) {
            System.out.println("----- 测试连接成功 -----");
       	 }
    }

3、获取数据列表

private static void getCatalogs() {
        DataSource source = GetDataSourceService.getSource();
        try {
            List<String> catList = new ArrayList<>();
            Connection conn = JdbcSourcePoolServer.getConnection(sourceId);
            if (conn == null) {
                System.out.println("----- 连接失败 -----");
                return;
            }
            ResultSet rs = conn.getMetaData().getCatalogs();
            while (rs.next()) {
                catList.add(rs.getString("TABLE_CAT"));
            }
            for (String cat : catList) {
                System.out.println("-----数据库名称:" + cat + " -----");
            }
            JDBCUtil.closeConnection(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4、获取指定数据库中的表

private static List<TableInfoVo> getTables() {
        DataSource source = GetDataSourceService.getSource();
        try {
            Connection conn = JdbcSourcePoolServer.getConnection(sourceId);
            if (conn == null) {
                System.out.println("----- 连接失败 -----");
                return null;
            }
            List<TableInfoVo> tabList = new ArrayList<>();

            String[] types = new String[]{"TABLE", "VIEW"};
            //也可以指定要查询表的数据库名称
            ResultSet rs = conn.getMetaData().getTables(conn.getCatalog(), conn.getSchema(), "%", types);
            JDBCUtil.closeConnection(conn);
            System.out.println("----- 表数据: -----");
            while (rs.next()) {
                TableInfoVo infoVo = new TableInfoVo();
                String tableName = rs.getString("TABLE_NAME");
                String desc = rs.getString("REMARKS");
                infoVo.setName(tableName);
                infoVo.setComment(desc);
                tabList.add(infoVo);

                System.out.println(infoVo);
            }
            JDBCUtil.closeConnection(conn);
            return tabList;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

java获取当前链接的数据库名称 java获取数据库字段_java_02

5、获取指定表中字段信息

private static void getColumns() {
        String tabName = "sys_account";
        DataSource source = GetDataSourceService.getSource();
        try {
            Connection conn = JdbcSourcePoolServer.getConnection(sourceId);
            if (conn == null) {
                System.out.println("----- 连接失败 -----");
                return;
            }
            List<TableInfoVo> colList = new ArrayList<>();
            ResultSet rs = conn.getMetaData().getColumns(conn.getCatalog(), conn.getSchema(), tabName, "%");
            JDBCUtil.closeConnection(conn);
            System.out.println("----- 字段数据: -----");
            while (rs.next()) {
                TableInfoVo infoVo = new TableInfoVo();
                String columnName = rs.getString("COLUMN_NAME");
                String typeName = rs.getString("TYPE_NAME");
                String desc = rs.getString("REMARKS");
                infoVo.setName(columnName);
                infoVo.setComment(desc);
                infoVo.setColumnType(typeName);
                colList.add(infoVo);

                System.out.println(infoVo);
            }
            JDBCUtil.closeConnection(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

java获取当前链接的数据库名称 java获取数据库字段_Source_03

6、执行SQL语句

private static void searchSql() {
		String sql= "select * from sys_account";
		int limit = 10;
        DataSource source = GetDataSourceService.getSource();
	    SqlResult result = JdbcSourcePoolServer.searchSql(sourceId, sql, );
        System.out.println("----- SQL预览: -----");

        System.out.println(result);
    }

7、源码下载

《Demo传送门》