美文网首页
JAVA动态读取mysql表的字段名&&索引

JAVA动态读取mysql表的字段名&&索引

作者: 小胖学编程 | 来源:发表于2021-02-03 14:17 被阅读0次

1. mysql提供的表和语句

Mysql所有数据表的字段(COLUMN)信息都保存在information_schema.COLUMNS表中,其定义如下:

表定义:

CREATE TEMPORARY TABLE `COLUMNS` (
  `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
  `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
  `COLUMN_NAME` varchar(64) NOT NULL DEFAULT '',
  `ORDINAL_POSITION` bigint(21) unsigned NOT NULL DEFAULT '0',
  `COLUMN_DEFAULT` longtext,
  `IS_NULLABLE` varchar(3) NOT NULL DEFAULT '',
  `DATA_TYPE` varchar(64) NOT NULL DEFAULT '',
  `CHARACTER_MAXIMUM_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `CHARACTER_OCTET_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `NUMERIC_PRECISION` bigint(21) unsigned DEFAULT NULL,
  `NUMERIC_SCALE` bigint(21) unsigned DEFAULT NULL,
  `DATETIME_PRECISION` bigint(21) unsigned DEFAULT NULL,
  `CHARACTER_SET_NAME` varchar(32) DEFAULT NULL,
  `COLLATION_NAME` varchar(32) DEFAULT NULL,
  `COLUMN_TYPE` longtext NOT NULL,
  `COLUMN_KEY` varchar(3) NOT NULL DEFAULT '',
  `EXTRA` varchar(30) NOT NULL DEFAULT '',
  `PRIVILEGES` varchar(80) NOT NULL DEFAULT '',
  `COLUMN_COMMENT` varchar(1024) NOT NULL DEFAULT '',
  `GENERATION_EXPRESSION` longtext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 可以通过如下的sql语句去读取某个mysql某个数据库下某个表的字段名:

并且按照表结构的顺序排序。

SELECT
    COLUMN_NAME 
FROM
    INFORMATION_SCHEMA.COLUMNS 
WHERE
    TABLE_SCHEMA = 数据库名 
    AND TABLE_NAME = 表明
ORDER BY
    ORDINAL_POSITION ASC;
  • 查询MySQL数据库中所有表的索引
select TABLE_NAME, INDEX_NAME, GROUP_CONCAT(COLUMN_NAME) as INDEX_COLUMN
from
information_schema.statistics
where
table_schema='库名'
GROUP BY TABLE_NAME, INDEX_NAME;

2. JAVA代码读取

public class TestDbConnection {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection connection = null;
        //创建连接
        try {
            String dbName = "test_db";
            String tableName = "test_table1";

            //创建url-数据库为:INFORMATION_SCHEMA
            String url = "jdbc:mysql://localhost:3306/INFORMATION_SCHEMA?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            //获取连接
            connection = DriverManager.getConnection(url, "root", "123qwe");
            Statement statement = connection.createStatement();
            //构建sql
            String sql = "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='"
                    + dbName + "' and TABLE_NAME='" + tableName + "' order by ORDINAL_POSITION asc;";
            //执行sql
            ResultSet resultSet = statement.executeQuery(sql);
            List<String> buf = new ArrayList<>();
            //读取到List中
            while (resultSet.next()) {
                buf.add(resultSet.getString(1));
            }
            //打印数据
            System.out.println(JSON.toJSONString(buf));
        } finally {
            if (connection != null) {
                connection.close();
            }
        }
    }
}

注意:需要引入mysql的驱动包

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>

相关文章

  • JAVA动态读取mysql表的字段名&&索引

    1. mysql提供的表和语句 Mysql所有数据表的字段(COLUMN)信息都保存在information_sc...

  • MySQL 基础之索引

    MySQL 索引 索引 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表...

  • MySQL 基础之索引

    MySQL 索引 索引 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表...

  • MySQL 索引

    MySQL 索引索引索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查...

  • MySQL 基础之索引

    MySQL 索引索引索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查...

  • Jsp读取MySQL数据

    继续上次的Java操作MySQL 这次继续深化一下,在JSP网页中读取java从MySQL获得的表。 运用知识: ...

  • MySQL 带参数的存储过程(动态执行SQL语句)

    MySQL5.0 以后,支持动态sql语句。当SQL语句中 字段名,表名,数据库名等 要作为变量时,必须要使用动态...

  • 关于数据库SQL调优

    数据库优化 高效使用索引 尽可能避免全表扫描 减少无效数据的查询 索引创建规则 idx_表名_字段名(字段名可以是...

  • Mysql 相关

    MySQL索引 MySQL索引背后的数据结构及算法原理 覆盖索引和回表操作 MySQL性能优化 MySql表分区详...

  • MySQL数据库基础之索引技术及字段维护

    MySQL索引和字段修改 1、MySQL索引技术 ①、创建带索引的表 Create table表名(user)( ...

网友评论

      本文标题:JAVA动态读取mysql表的字段名&&索引

      本文链接:https://www.haomeiwen.com/subject/yenptltx.html