栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java+RestltData获取数据库、数据库表、表字段、执行sql等数据源操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java+RestltData获取数据库、数据库表、表字段、执行sql等数据源操作

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

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 {

    
    private static ConcurrentHashMap connPol = new ConcurrentHashMap<>();

    
    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;
        }
    }

    
    public static SqlResult searchSql(String sourceId, String sql, int limit) {
        //默认预览条数
        sql = sql + " limit " + limit;

        //存放字段名称
        List cellHeader = null;
        //存放字段类型
        Map colType = null;
        //存放字段值集合
        List 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 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;
        }
    }


    
    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 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 getTables() {
        DataSource source = GetDataSourceService.getSource();
        try {
            Connection conn = JdbcSourcePoolServer.getConnection(sourceId);
            if (conn == null) {
                System.out.println("----- 连接失败 -----");
                return null;
            }
            List 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;
        }
    }

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 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();
        }
    }

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传送门》

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

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

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