首页 > 数据库 >三种方式从jdbc中获取数据库表字段信息

三种方式从jdbc中获取数据库表字段信息

时间:2023-05-17 10:55:05浏览次数:43  
标签:info jdbc log 数据库 error 表字 resultSetMetaData String

一、整体代码

1、method1:执行select语句获取,select * from dims where 1 = 2

2、method2:执行show create table获取,show create table dims

3、method3:从jdbc数据库连接获取

import lombok.extern.slf4j.Slf4j;

import java.sql.*;
import java.util.Properties;

/**
 * 从jdbc中获取数据库表字段信息(包含字段名称、字段类型、字段注释、字段长度等)
 */
@Slf4j
public class test {
    private static Connection connection;

    public static void main(String[] args) {
        test test = new test();
        // 第一种方式:执行sql语句获取 select * from dims where 1 = 2
        test.method1();
        // 第二种方式:执行sql语句获取 show create table dims
        test.method2();
        // 第三种方式:直接从jdbc数据库连接Connection实例中获取
        test.method3();
    }

    private void method1() {
        try{
            PreparedStatement preparedStatement = connection.prepareStatement("select * from dims where 1 = 2");
            ResultSetMetaData resultSetMetaData = preparedStatement.executeQuery().getMetaData();
            for (int i = 0; i < resultSetMetaData.getColumnCount(); i++) {
                log.info("实例名:{}", resultSetMetaData.getCatalogName(i + 1));
                log.info("表名:{}", resultSetMetaData.getTableName(i + 1));
                log.info("类型:{}", resultSetMetaData.getColumnClassName(i + 1));
                log.info("列类型:{}", resultSetMetaData.getColumnTypeName(i + 1));
                log.info("字段名称:{}", resultSetMetaData.getColumnName(i + 1));
                log.info("字段长度:{}", resultSetMetaData.getColumnDisplaySize(i + 1));
                log.info("getColumnType:{}", resultSetMetaData.getColumnType(i + 1));
                log.info("getPrecision:{}", resultSetMetaData.getPrecision(i + 1));
                log.info("getScale:{}", resultSetMetaData.getScale(i + 1));
                log.info("getSchemaName:{}", resultSetMetaData.getSchemaName(i + 1));
                log.info("getScale:{}", resultSetMetaData.getScale(i + 1));
            }
        } catch (Exception e) {
            log.error("method1 error ", e);
        }
    }

    private void method2() {
        try{
            PreparedStatement preparedStatement2 = connection.prepareStatement("show create table dims");
            ResultSet resultSet2 = preparedStatement2.executeQuery();
            while(resultSet2.next()) {
                String tableName = resultSet2.getString("Table");
                String createTable = resultSet2.getString("Create Table");
                log.info("tableName:{}", tableName);
                log.info("createTable:");
                System.out.println(createTable);
            }
        } catch (Exception e) {
            log.error("method2 error ", e);
        }
    }

    private void method3() {
        try{
            DatabaseMetaData databaseMetaData = connection.getMetaData();
            // 获取所有表
            ResultSet resultSet = databaseMetaData.getTables(null, null, null, new String[]{"TABLE"});
            // 获取指定表
            ResultSet specificResultSet = databaseMetaData.getColumns(null, "%", "dims", "%");
            String columnName2;
            String columnType2;
            String comment2;
            while(specificResultSet.next()) {
                columnName2 = specificResultSet.getString("COLUMN_NAME");
                columnType2 = specificResultSet.getString("TYPE_NAME");
                comment2 = specificResultSet.getString("REMARKS");
                log.info("COLUMN_NAME:{}", columnName2);
                log.info("TYPE_NAME:{}", columnType2);
                log.info("REMARKS:{}", comment2);
            }
        } catch (Exception e) {
            log.error("method3 error ", e);
        }
    }

    static {
        try{
            Properties info = new Properties(); // 定义Properties对象
            info.setProperty("user", "user"); // 设置Properties对象属性
            info.setProperty("password", "123456");
            Class.forName("com.mysql.cj.jdbc.Driver"); // 注册数据库驱动
            String url = "jdbc:mysql://127.0.0.1:3306/databases"; // briup为数据库名称
            connection = DriverManager.getConnection(url, info); // 获取连接数据库的Connection对象
        } catch (Exception e) {
            log.error("autoCodeGeneratorProcess error ", e);
        }
    }
}

 

标签:info,jdbc,log,数据库,error,表字,resultSetMetaData,String
From: https://www.cnblogs.com/robots2/p/17407890.html

相关文章

  • druid使用时,发现数据库空闲太久自动关闭连接导致异常的问题
    系统启动后,创建了连接池。那如果后续超过数据库配置的最大连接时间,就会单方面的断开连接。而此时,druid并不知道,所以,在有请求访问进行数据操作的时候,使用到那个已断开的连接,就会报错。 解决方式是:回收连接池中的链接实例:timeBetweenEvictionRunsMillis:10000minEvictab......
  • Laravel5.8-添加、更新、删除数据库字段
    在设计表的时候,往往不能一次性到位,很多的时候会根据需求重新补充缺少的字段   一、添加字段1phpartisanmake:migrationadd_testmore_add_siteid--table=testmore2phpartisanmake:migration#固定格式3add_testmore_add_siteid#对应的生成文件名称,在其中加入......
  • impala jdbc导出hive数据字典
    业务需求太多了,给完整导出为html文件,以及之前搞的publicstaticvoidmain(String[]args)throwsException{kerberos();}publicstaticvoidkerberos(){URLresource=Thread.currentThread().getContextClassLoader().getResource("");......
  • 数据库中表名大小写问题
    一个sql整了半天排错,发现是表名大小写不一样导致的,所以记录下查了下资料,mysql的表名是根据存储在操作系统上的文件的名称来判断的。如果操作系统文件名不区分大小写,例如windows,那么对应的表名就不区大小写。如果操作系统文件名区分大小写,例如linux,那么对应的表名就区分大小......
  • kettle 在线服务 carte 数据 资源库默认大写 数据库使用默认端口
    连接已存在资源库原来是表名小写直接设置mysql表名小写vim/etc/mysql/my.cnf#值为0表示不进行转换,值为2表示区分大小写,并且会将表名存储为区分大小写的形式lower_case_table_names=1遇到资源端口3307kettle确是3306只修改了r_databse表的host、port、use......
  • 告诉你数据库的稳定性都在测试什么
    中国信通院给定的稳定性测试的思想如下:保障分布式数据库系统的稳定运行,就先要有测试其稳定性的工具和方法。混沌测试是一种新兴的对分布式系统的稳定性进行测试的技术。其主要思想是测试人员主动对系统引入故障,例如单个或多个节点的线程故障、网络故障、CPU高负载、内存占用满、硬......
  • SQL优化改写案例14(OB数据库SQL优化,把你的脑袋当成CBO)
    OB一哥们找我优化条SQL,反馈在OceanBase存储过程执行时间很慢,需要626秒才能出结果,安排。--原SQL:INSERTINTOinsurance_stat_sx(id,stat_date,cal_num,underwrite_num,veh_num,effect_num,effect_money,unit_code,life_......
  • 实验三 Web数据库程序设计
     实  验  报  告  课程名称:  WEB应用开发技术  任课教师:   雷 宇         实验日期: 2023.5.16          班   级:     信2105-2班                                    ......
  • python学生管理系统笔记(+增删改查,但不存入数据库或文件中)
    原本的基础上+增删改查,但不存入数据库或文件中,就是数据只在一次运行的页面中进行增删改查,但是重新运行不会有之前的数据,因为没有更新到json或者数据库中。1.LoginPage.pyimporttkinterastkfromtkinterimportmessageboxfromdbimportdbfromMainPageimportMainPage......
  • 2023年5月中国数据库排行榜:OTO组合回归育新机,华为高斯蓄势待发展雄心
    路漫漫其修远兮,吾将上下而求索。 2023年5月的 墨天轮中国数据库流行度排行 火热出炉,本月共有262个数据库参与排名。本月排行榜前十变动较大,可以用一句话概括为:openGauss立足创新夺探花;华为云GaussDB云上之争成赢家;其余数据库自强不息居原位。从2023年5月起,排行榜月度解读文......