获取代码获取数据库表,字段信息-两种方式

业务需求找了一下代码里获取数据库表和表字段信息的方式

一、sql查询

查询information_schema表可以获取到整个数据库的信息

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("/sql-test")
    public void t() {
        String tableName = "combo_card";//表名
        //一、获取表名
        SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet("select table_name tableName, engine, table_comment tableComment, create_time createTime " +
                "from information_schema.tables where table_schema = "+tableName);
        while(sqlRowSet.next()){
            System.out.println(sqlRowSet.getString("tableName"));
        }
        //一、获取列数据
        SqlRowSet sqlRowSet1 = jdbcTemplate.queryForRowSet("select * from information_schema.columns " +
                "where table_schema = '库名' AND table_name = '" + tableName + "'");
        while (sqlRowSet1.next()) {
            System.out.println(sqlRowSet);
        }
	}

二、JDBC元数据

从连接的元数据中去获取

 @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("/sql-test")
    public void t() {
        String tableName = "combo_card";//表名
        List<IntrospectedColumn> columns=new LinkedList<>();
        Object execute = jdbcTemplate.execute(new ConnectionCallback<Object>() {
            @Override
            public Object doInConnection(Connection con) throws SQLException, DataAccessException {
                DatabaseMetaData metaData = con.getMetaData();
                ResultSet schemas = metaData.getSchemas();
                String[] types = {"TABLE"};
                //二、获取表名
                ResultSet tables = metaData.getTables(null, null, null, types);
                while(tables.next()){
                    System.out.println(tables.getString("TABLE_NAME"));
                }
                //二、获取列数据
                ResultSet rs = metaData.getColumns(null, null, tableName, "%");
                while (rs.next()) {
                    IntrospectedColumn introspectedColumn = new IntrospectedColumn();
                    introspectedColumn.setTableAlias(tableName);
                    introspectedColumn.setJdbcType(rs.getInt("DATA_TYPE"));
                    introspectedColumn.setLength(rs.getInt("COLUMN_SIZE"));
                    introspectedColumn.setActualColumnName(rs.getString("COLUMN_NAME"));
                    introspectedColumn.setNullable(rs.getInt("NULLABLE") == DatabaseMetaData.columnNullable);
                    introspectedColumn.setScale(rs.getInt("DECIMAL_DIGITS"));
                    introspectedColumn.setRemarks(rs.getString("REMARKS"));
                    introspectedColumn.setDefaultValue(rs.getString("COLUMN_DEF"));
                    introspectedColumn.setAutoIncrement("YES".equals(rs.getString("IS_AUTOINCREMENT")));
                    columns.add(introspectedColumn);
                }
                return "resultSet";
            }
        });
        System.out.println(columns);
    }

–OF–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值