DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文讲解DatabaseMetaData和ResultSetMetaData接口获取元数据的方法。
获取数据库的所有表:(以MySQL和Oracle为例,其他类型的数据库接触不过,不做解释)
Connection接口中提供了DatabaseMetaData接口:
提供:getTables()方法,该方法需要传进4个参数:
第一个是数据库名称,对于MySQL,则对应相应的数据库,对于Oracle来说,则是对应相应的数据库实例,可以不填,也可以直接使用Connection的实例对象中的getCatalog()方法返回的值填充;
第二个是模式,可以理解为数据库的登录名,而对于Oracle也可以理解成对该数据库操作的所有者的登录名。对于Oracle要特别注意,其登陆名必须是大写,不然的话是无法获取到相应的数据,而MySQL则不做强制要求。
第三个是表名称,一般情况下如果要获取所有的表的话,可以直接设置为null,如果设置为特定的表名称,则返回该表的具体信息。
第四个是类型标准,以数组形式传值,有"TABLE"、“VIEW”、“SYSTEM TABLE”、"GLOBAL
TEMPORARY"、“LOCAL TEMPORARY”、“ALIAS” 和
"SYNONYM"这几个经典的类型,一般使用”TABLE”,即获取所有类型为TABLE的表
它返回一个ResultSet对象,有10列,详细的显示了表的类型:
TABLE_CAT String => 表类别(可为 null)
TABLE_SCHEM String => 表模式(可为 null)
TABLE_NAME String => 表名称
TABLE_TYPE String => 表类型。
REMARKS String => 表的解释性注释
TYPE_CAT String => 类型的类别(可为 null)
TYPE_SCHEM String => 类型模式(可为null)
TYPE_NAME String => 类型名称(可为 null)
SELF_REFERENCING_COL_NAME String
有类型表的指定 “identifier” 列的名称(可为 null)
REF_GENERATION String
可根据需要使用
示例:
(MySQL)
DatabaseMetaData metaData = conn.getMetaData();
ResultSet rs =
metaData.getTables(conn.getCatalog(), "root", null,
new String[]{"TABLE"});
while(rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
(Oracle)
DatabaseMetaData metaData = conn.getMetaData();
ResultSet rs = metaData.getTables(conn.getCatalog(), "SCOTT", null,
new String[]{"TABLE"});
while(rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
这两处的代码,唯一区别的是在第二个参数,Oracle不支持小写的,必须是大写的,换成小写则什么都获取不到,而MySQL则大小写俱可,不过我建议是全部使用大写;
DatabaseMetaData接口常用的方法:
(1) ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types); //获取表信息
(2) ResultSet getPrimaryKeys(String catalog,String schema,String table); //获取表主键信息
(3) ResultSet getIndexInfo(String catalog,String schema,String table,boolean unique,boolean approximate); //获取表索引信息
(4) ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern); //获取表列信息
方法体:
getDatabaseProductName:获取数据库的产品名称 getDatabaseProductName:获取数据库的版本号 getUserName:获取数据库的用户名 getURL:获取数据库连接的URL getDriverName:获取数据库的驱动名称 driverVersion:获取数据库的驱动版本号 isReadOnly:查看数据库是否只允许读操作 supportsTransactions:查看数据库是否支持事务
常用易懂DEMO
package com.example.democrud.democurd.controller;
import java.sql.*;
public class demoTest3 {
public static void main(String[] args) {
Connection conn=null;
String DRIVER="com.mysql.cj.jdbc.Driver";
String URL="jdbc:mysql://127.0.0.1:3306/atguigudb?serverTimezone=UTC";
String USER="root";
String PASSWORD="root";
try {
Class.forName(DRIVER);
conn= DriverManager.getConnection(URL, USER, PASSWORD);
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = null;
System.out.println("数据库已知的用户: "+ dbmd.getUserName());
System.out.println("数据库的系统函数的逗号分隔列表: "+ dbmd.getSystemFunctions());
System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ dbmd.getTimeDateFunctions());
System.out.println("数据库的字符串函数的逗号分隔列表: "+ dbmd.getStringFunctions());
System.out.println("数据库供应商用于 'schema' 的首选术语: "+ dbmd.getSchemaTerm());
System.out.println("数据库URL: " + dbmd.getURL());
System.out.println("是否允许只读:" + dbmd.isReadOnly());
System.out.println("数据库的产品名称:" + dbmd.getDatabaseProductName());
System.out.println("数据库的版本:" + dbmd.getDatabaseProductVersion());
System.out.println("驱动程序的名称:" + dbmd.getDriverName());
System.out.println("驱动程序的版本:" + dbmd.getDriverVersion());
System.out.println("数据库中使用的表类型");
rs = dbmd.getTableTypes();
while (rs.next()) {
System.out.println(rs.getString("TABLE_TYPE"));
}
System.out.println("得到的数据内容----------------------------------------");
PreparedStatement pstmt = conn.prepareStatement("select * from atguigudb.countries ");
System.out.println("----------------------------------------");
rs = pstmt.executeQuery();
ResultSetMetaData rs_metaData = rs.getMetaData();
while (rs.next()) {
int count = rs_metaData.getColumnCount();
for (int i=0; i<count; i++) {
String columnName = rs_metaData.getColumnName(i + 1);
Object columnValue = rs.getObject(columnName);
System.out.print(columnName + "=" + columnValue + ",\n");
}
System.out.println("----------------------------------------");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
运行结果:
D:\工作磁盘\java环境\jdk1.8.0_181\bin\java.exe "-javaagent:D:\工作磁盘\java环境\idea\IntelliJ IDEA 2021.3.1\lib\idea_rt.jar=58258:D:\工作磁盘\java环境\idea\IntelliJ IDEA 2021.3.1\bin" -Dfile.encoding=UTF-8 -classpath D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\charsets.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\deploy.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\access-bridge-32.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\dnsns.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\jaccess.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\localedata.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\nashorn.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunec.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\zipfs.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\javaws.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jce.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jfr.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jfxswt.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jsse.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\management-agent.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\plugin.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\resources.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\rt.jar;D:\工作磁盘\yanwc_code\springboot-daily-crud-record\target\classes;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-jdbc\2.1.7.RELEASE\spring-boot-starter-jdbc-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter\2.1.7.RELEASE\spring-boot-starter-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot\2.1.7.RELEASE\spring-boot-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-logging\2.1.7.RELEASE\spring-boot-starter-logging-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-jdbc\5.1.9.RELEASE\spring-jdbc-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-beans\5.1.9.RELEASE\spring-beans-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-tx\5.1.9.RELEASE\spring-tx-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-thymeleaf\2.1.7.RELEASE\spring-boot-starter-thymeleaf-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\thymeleaf\thymeleaf-spring5\3.0.11.RELEASE\thymeleaf-spring5-3.0.11.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\thymeleaf\thymeleaf\3.0.11.RELEASE\thymeleaf-3.0.11.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-web\2.1.7.RELEASE\spring-boot-starter-web-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-json\2.1.7.RELEASE\spring-boot-starter-json-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\core\jackson-databind\2.9.9\jackson-databind-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\core\jackson-core\2.9.9\jackson-core-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.9\jackson-datatype-jdk8-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.9\jackson-datatype-jsr310-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.9\jackson-module-parameter-names-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-tomcat\2.1.7.RELEASE\spring-boot-starter-tomcat-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.22\tomcat-embed-core-9.0.22.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.22\tomcat-embed-el-9.0.22.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.22\tomcat-embed-websocket-9.0.22.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\hibernate\validator\hibernate-validator\6.0.17.Final\hibernate-validator-6.0.17.Final.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-web\5.1.9.RELEASE\spring-web-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-webmvc\5.1.9.RELEASE\spring-webmvc-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-aop\5.1.9.RELEASE\spring-aop-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-context\5.1.9.RELEASE\spring-context-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-expression\5.1.9.RELEASE\spring-expression-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-core\5.1.9.RELEASE\spring-core-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-jcl\5.1.9.RELEASE\spring-jcl-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.1.0\mybatis-spring-boot-starter-2.1.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.1.0\mybatis-spring-boot-autoconfigure-2.1.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\mybatis\3.5.2\mybatis-3.5.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\mybatis-spring\2.0.2\mybatis-spring-2.0.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-beanutils\commons-beanutils\1.8.0\commons-beanutils-1.8.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-lang\commons-lang\2.5\commons-lang-2.5.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\net\sf\ezmorph\ezmorph\1.0.6\ezmorph-1.0.6.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\webjars\jquery\3.3.0\jquery-3.3.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\webjars\bootstrap\4.0.0\bootstrap-4.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\webjars\npm\popper.js\1.11.1\popper.js-1.11.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-configuration-processor\2.1.7.RELEASE\spring-boot-configuration-processor-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\mysql\mysql-connector-java\8.0.18\mysql-connector-java-8.0.18.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-boot-starter\3.3.1\mybatis-plus-boot-starter-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus\3.3.1\mybatis-plus-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-extension\3.3.1\mybatis-plus-extension-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-core\3.3.1\mybatis-plus-core-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-annotation\3.3.1\mybatis-plus-annotation-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\github\jsqlparser\jsqlparser\3.1\jsqlparser-3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.7.RELEASE\spring-boot-autoconfigure-2.1.7.RELEASE.jar com.example.democrud.democurd.controller.demoTest3
数据库已知的用户: root@localhost
数据库的系统函数的逗号分隔列表: DATABASE,USER,SYSTEM_USER,SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION
数据库的时间和日期函数的逗号分隔列表: DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,PERIOD_ADD,PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT,CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,NOW,SYSDATE,CURRENT_TIMESTAMP,UNIX_TIMESTAMP,FROM_UNIXTIME,SEC_TO_TIME,TIME_TO_SEC
数据库的字符串函数的逗号分隔列表: ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,CONCAT_WS,CONV,ELT,EXPORT_SET,FIELD,FIND_IN_SET,HEX,INSERT,INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LOCATE,LOWER,LPAD,LTRIM,MAKE_SET,MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,QUOTE,REPEAT,REPLACE,REVERSE,RIGHT,RPAD,RTRIM,SOUNDEX,SPACE,STRCMP,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING_INDEX,TRIM,UCASE,UPPER
数据库供应商用于 'schema' 的首选术语:
数据库URL: jdbc:mysql://127.0.0.1:3306/atguigudb?serverTimezone=UTC
是否允许只读:false
数据库的产品名称:MySQL
数据库的版本:8.0.29
驱动程序的名称:MySQL Connector/J
驱动程序的版本:mysql-connector-java-8.0.18 (Revision: fef2894d751d47223192b706977b4a5bc41e6be4)
数据库中使用的表类型
LOCAL TEMPORARY
SYSTEM TABLE
SYSTEM VIEW
TABLE
VIEW
----------------------------------------
----------------------------------------
country_id=AR,
country_name=Argentina,
region_id=2,
----------------------------------------
country_id=AU,
country_name=Australia,
region_id=3,
----------------------------------------
country_id=BE,
country_name=Belgium,
region_id=1,
----------------------------------------
country_id=BR,
country_name=Brazil,
region_id=2,
----------------------------------------
country_id=CA,
country_name=Canada,
region_id=2,
----------------------------------------
country_id=CH,
country_name=Switzerland,
region_id=1,
----------------------------------------
country_id=CN,
country_name=China,
region_id=3,
----------------------------------------
country_id=DE,
country_name=Germany,
region_id=1,
----------------------------------------
country_id=DK,
country_name=Denmark,
region_id=1,
----------------------------------------
country_id=EG,
country_name=Egypt,
region_id=4,
----------------------------------------
country_id=FR,
country_name=France,
region_id=1,
----------------------------------------
country_id=HK,
country_name=HongKong,
region_id=3,
----------------------------------------
country_id=IL,
country_name=Israel,
region_id=4,
----------------------------------------
country_id=IN,
country_name=India,
region_id=3,
----------------------------------------
country_id=IT,
country_name=Italy,
region_id=1,
----------------------------------------
country_id=JP,
country_name=Japan,
region_id=3,
----------------------------------------
country_id=KW,
country_name=Kuwait,
region_id=4,
----------------------------------------
country_id=MX,
country_name=Mexico,
region_id=2,
----------------------------------------
country_id=NG,
country_name=Nigeria,
region_id=4,
----------------------------------------
country_id=NL,
country_name=Netherlands,
region_id=1,
----------------------------------------
country_id=SG,
country_name=Singapore,
region_id=3,
----------------------------------------
country_id=UK,
country_name=United Kingdom,
region_id=1,
----------------------------------------
country_id=US,
country_name=United States of America,
region_id=2,
----------------------------------------
country_id=ZM,
country_name=Zambia,
region_id=4,
----------------------------------------
country_id=ZW,
country_name=Zimbabwe,
region_id=4,
----------------------------------------
Process finished with exit code 0
 
扩展
DEMO1
在网上找了一些不错的例子demo
需要补充下contrller入口调用类、TableInfoQueyVO实体对象。这里只是写了实现方法
package cn.com.yusys.yusp.base.data.service.impl;
import cn.com.yusys.yusp.base.data.domain.vo.TableInfoQueyVO;
import cn.com.yusys.yusp.base.data.service.TableInfoQueryService;
import cn.com.yusys.yusp.commons.util.StringUtils;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.*;
@Slf4j
@Service("tableInfoQueryService")
public class TableInfoQueryServiceImpl implements TableInfoQueryService {
@Override
public List<TableInfoQueyVO> getTableFieldInfo(String dataInfo) throws Exception {
Map<String,String> dataSourceInfos = (Map<String, String>) JSON.parse(dataInfo);
String dataSourceUrl = dataSourceInfos.get("dataSourceUrl");
if (StringUtils.isBlank(dataSourceUrl)){
throw new Exception("数据源信息为空!");
}
String userName = dataSourceInfos.get("userName");
if (StringUtils.isBlank(userName)){
throw new Exception("该用户信息为空!");
}
String passWord = dataSourceInfos.get("passWord");
if (StringUtils.isBlank(passWord)){
throw new Exception("该用户密码为空!");
}
String tableName = dataSourceInfos.get("tableName");
if (StringUtils.isBlank(tableName)){
throw new Exception("查询表名不能为空!");
}
Connection conn = getDataSourceConn(dataSourceUrl,userName,passWord);
log.info("-------数据源初始化结束------");
DatabaseMetaData metaData = conn.getMetaData();
List<TableInfoQueyVO> tableFields = this.getTableFields(metaData, tableName,dataSourceUrl,userName);
return tableFields;
}
@Override
public List<Map<String, String>> getTableListInfo(String dataSourceInfo) throws Exception {
Map<String,String> dataSourceInfos = (Map<String, String>) JSON.parse(dataSourceInfo);
String dataSourceUrl = dataSourceInfos.get("dataSourceUrl");
if (StringUtils.isBlank(dataSourceUrl)){
throw new Exception("数据源信息为空!");
}
String userName = dataSourceInfos.get("userName");
if (StringUtils.isBlank(userName)){
throw new Exception("该用户信息为空!");
}
String passWord = dataSourceInfos.get("passWord");
if (StringUtils.isBlank(passWord)){
throw new Exception("该用户密码为空!");
}
log.info("开始查询数据源{}-{}-{},信息",dataSourceUrl,userName,passWord);
Connection conn = getDataSourceConn(dataSourceUrl,userName,passWord);
log.info("-------数据源初始化结束------");
DatabaseMetaData metaData = conn.getMetaData();
List<Map<String, String>> tableList = this.getTableInfoList(metaData,dataSourceUrl,userName);
closeConnection(conn);
return tableList;
}
@Override
public List<Map<String, Object>> getTableInfos(String dataSourceInfo) throws Exception{
Map<String,String> dataSourceInfos = (Map<String, String>) JSON.parse(dataSourceInfo);
String dataSourceUrl = dataSourceInfos.get("dataSourceUrl");
if (StringUtils.isBlank(dataSourceUrl)){
throw new Exception("数据源信息为空!");
}
String userName = dataSourceInfos.get("userName");
if (StringUtils.isBlank(userName)){
throw new Exception("该用户信息为空!");
}
String passWord = dataSourceInfos.get("passWord");
if (StringUtils.isBlank(passWord)){
throw new Exception("该用户密码为空!");
}
log.info("开始查询数据源{},信息",dataSourceUrl,userName,passWord);
List<Map<String,Object>> listInfos = new ArrayList<>();
Connection conn = getDataSourceConn(dataSourceUrl,userName,passWord);
log.info("-------数据源初始化结束------");
DatabaseMetaData metaData = conn.getMetaData();
List<Map<String, String>> tableList = this.getTableList(metaData,dataSourceUrl,userName);
for (Map<String, String> stringMap : tableList) {
Map<String,Object> tableInfoMap = new HashMap<>();
for (String ss : stringMap.keySet()) {
tableInfoMap.put("tableName",ss);
List<TableInfoQueyVO> tableFields = this.getTableFields(metaData, ss,dataSourceUrl,userName);
tableInfoMap.put("tableFields",tableFields);
}
listInfos.add(tableInfoMap);
}
closeConnection(conn);
log.info("查询数据源信息处理结束!");
return listInfos;
}
public Connection getDataSourceConn(String dataSourceUrl,String userName,String passWord) throws Exception{
log.info("-------数据源初始化开始------");
Properties pros = new Properties();
pros.setProperty("user",userName);
pros.setProperty("password",passWord);
pros.setProperty("remarks","true");
if (dataSourceUrl.contains("mysql")){
pros.setProperty("useInformationSchema","true");
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
}else if (dataSourceUrl.contains("oracle")){
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
}else {
throw new Exception("不支持的数据类型");
}
return DriverManager.getConnection(dataSourceUrl,pros);
}
public List<Map<String,String>> getTableList(DatabaseMetaData metaData,String dataSourceUrl,String userName) throws Exception{
log.info("-------获取数据库表 列表开始---------");
List<Map<String,String>> tableInfoList = new ArrayList<>();
String dataBaseName = null;
if (dataSourceUrl.contains("mysql")){
dataBaseName =dataSourceUrl.substring(dataSourceUrl.lastIndexOf("/")+1,dataSourceUrl.indexOf("?"));
userName = null;
}
ResultSet tables = metaData.getTables(dataBaseName, userName, "%", new String[]{"TABLE"});
while (tables.next()){
Map<String,String> tableInfoMap = new HashMap<>();
tableInfoMap.put(tables.getString("TABLE_NAME"),tables.getString("REMARKS"));
tableInfoList.add(tableInfoMap);
}
log.info("-------获取数据库表 列表结束---------");
return tableInfoList;
}
public List<TableInfoQueyVO> getTableFields(DatabaseMetaData metaData,String tableName,String dataSourceUrl,String userName) throws Exception{
List<TableInfoQueyVO> tableFieldList = new ArrayList<>();
String dataBaseName = null;
if (dataSourceUrl.contains("mysql")){
dataBaseName =dataSourceUrl.substring(dataSourceUrl.lastIndexOf("/")+1,dataSourceUrl.indexOf("?"));
userName = null;
}
ResultSet dataColumns = metaData.getColumns(dataBaseName, userName, tableName, "%");
ResultSet keys = metaData.getPrimaryKeys(dataBaseName, null, tableName);
Object entityInstance = this.getEntityInstance(getClassNameList(tableName));
Map<String,String> breakMap = new HashMap<>();
while(null!=dataColumns&&dataColumns.next()){
TableInfoQueyVO tiqv = new TableInfoQueyVO();
if (!StringUtils.isEmpty(breakMap.get(dataColumns.getString("COLUMN_NAME")))){
break;
}
breakMap.put(dataColumns.getString("COLUMN_NAME"),dataColumns.getString("TYPE_NAME"));
if (this.compareFieldType(dataColumns.getString("COLUMN_NAME"),
dataColumns.getString("TYPE_NAME"),entityInstance)){
tiqv.setFieldType(dataColumns.getString("TYPE_NAME"));
}
tiqv.setFieldCode(dataColumns.getString("COLUMN_NAME"));
tiqv.setFieldName(dataColumns.getString("REMARKS"));
String primaryKey = null;
if (null!=keys&&keys.next()){
primaryKey = keys.getString("COLUMN_NAME");
String primaryKeyType = keys.getString("PK_NAME");
if ("PRIMARY".equals(primaryKeyType)&&primaryKey.equals(tiqv.getFieldCode())){
tiqv.setIsKey(primaryKey);
}
}
tableFieldList.add(tiqv);
}
breakMap.clear();
return tableFieldList;
}
public void closeConnection(Connection conn) throws Exception{
if (conn.isClosed()){
log.info("数据源链接已关闭!");
return;
}else {
conn.close();
log.info("数据源链接关闭结束");
}
}
public Object getEntityInstance(List<String> className) throws Exception{
Class<?> aClass;
for (String s : className) {
try {
aClass = Class.forName(s);
} catch (ClassNotFoundException e) {
continue;
}
if (null != aClass){
return aClass.newInstance();
}
}
return null;
}
public List<String> getClassNameList(String tableName){
List<String> classPathList = new ArrayList<>();
classPathList.add("cn.com.yusys.yusp.base.data.domain.entity.");
classPathList.add("cn.com.yusys.yusp.base.engine.domain.entity.");
classPathList.add("cn.com.yusys.yusp.data.domain.entity.");
classPathList.add("cn.com.yusys.yusp.message.entity.");
classPathList.add("cn.com.yusys.yusp.notice.entity.");
classPathList.add("cn.com.yusys.yusp.oca.domain.entity.");
classPathList.add("cn.com.yusys.yusp.strategy.data.domain.entity.");
classPathList.add("cn.com.yusys.yusp.strategy.engine.domain.entity.");
classPathList.add("cn.com.yusys.yusp.strategy.manager.domain.entity.");
classPathList.add("cn.com.yusys.yusp.stream.engine.domain.entity.");
classPathList.add("cn.com.yusys.yusp.stream.manager.domain.entity.");
classPathList.add("cn.com.yusys.yusp.untiy.domain.entity.");
classPathList.add("cn.com.yusys.yusp.warning.data.domain.entity.");
classPathList.add("cn.com.yusys.yusp.warning.engine.domain.entity.");
List<String> classPathContent = new ArrayList<>();
String[] split = tableName.split("_");
String tableNameTmpA = "";
for (String s : split) {
tableNameTmpA = tableNameTmpA+org.apache.commons.lang.StringUtils.capitalize(s);
}
String tableNameTmpB = "";
for (int i = 1; i < split.length; i++) {
tableNameTmpB = tableNameTmpB+org.apache.commons.lang.StringUtils.capitalize(split[i]);
}
for (String s : classPathList) {
classPathContent.add(s+tableNameTmpA+"Entity");
classPathContent.add(s+tableNameTmpA+"Entity");
}
return classPathContent;
}
public boolean compareFieldType(String fieldName,String fieldType,Object entityInstance){
if (org.springframework.util.StringUtils.isEmpty(entityInstance)){
return true;
}
Field[] declaredFields = entityInstance.getClass().getDeclaredFields();
if (org.springframework.util.StringUtils.isEmpty(declaredFields)){
return false;
}
String[] split = fieldName.split("_");
String fieldNameTmp = split[0].toLowerCase();
for (int i = 1; i < split.length; i++) {
fieldNameTmp = fieldNameTmp+org.apache.commons.lang.StringUtils.capitalize(split[i].toLowerCase());
}
for (Field declaredField : declaredFields) {
if (org.springframework.util.StringUtils.isEmpty(declaredField)){
continue;
}
if (StringUtils.isBlank(FieldTypeRef.getRefTypeCode(fieldType))){
return false;
}
if (fieldNameTmp.equals(declaredField.getName())
&&declaredField.getType().getName().contains(FieldTypeRef.getRefTypeCode(fieldType))){
return true;
}
}
return false;
}
public List<Map<String,String>> getTableInfoList(DatabaseMetaData metaData,String dataSourceUrl,String userName) throws Exception{
log.info("-------获取数据库表 列表开始---------");
List<Map<String,String>> tableInfoList = new ArrayList<>();
String dataBaseName = null;
if (dataSourceUrl.contains("mysql")){
dataBaseName =dataSourceUrl.substring(dataSourceUrl.lastIndexOf("/")+1,dataSourceUrl.indexOf("?"));
userName = null;
}
ResultSet tables = metaData.getTables(dataBaseName, userName, "%", new String[]{"TABLE"});
while (tables.next()){
Map<String,String> tableInfoMap = new HashMap<>();
tableInfoMap.put("tableCode",tables.getString("TABLE_NAME"));
tableInfoMap.put("tableName",tables.getString("REMARKS"));
tableInfoList.add(tableInfoMap);
}
log.info("-------获取数据库表 列表结束---------");
return tableInfoList;
}
}
enum FieldTypeRef{
VAR("VARCHAR","String"),
TEXT("TEXT","String"),
INT("INT","Integer"),
DATETIME("DATETIME","Date"),
CHAR("CHAR","String"),
DECIMAL("DECIMAL","BigDecimal"),
FLOAT("FLOAT","float")
;
private String typeCode;
private String refTypeCoe;
public String getTypeCode() {
return typeCode;
}
public void setTypeCode(String typeCode) {
this.typeCode = typeCode;
}
public String getRefTypeCoe() {
return refTypeCoe;
}
public void setRefTypeCoe(String refTypeCoe) {
this.refTypeCoe = refTypeCoe;
}
FieldTypeRef(String typeCode, String refTypeCoe) {
this.typeCode = typeCode;
this.refTypeCoe = refTypeCoe;
}
public static String getRefTypeCode(String key){
for (FieldTypeRef value : FieldTypeRef.values()) {
if (key.equals(value.typeCode)){
return value.getRefTypeCoe();
}
}
return null;
}
}
getTables 检索给定目录中可用表的描述。仅返回与目录、模式、表名称和类型条件匹配的表描述。它们按 TABLE_TYPE、TABLE_CAT、TABLE_SCHEM 和 TABLE_NAME 排序。
参数:
? String catalog: mysql下就是数据库名称,oracle下就是instance名;可以为null,可以为“”。解释参见@param catalog
? String schemaPattern:mysql下就是数据库名称,oracle中就是用户名.解释参见@param schemaPattern
? String tableNamePattern: 数据表名称
? String[] types: 查询的表类型,参考注解中的解释
getColumns
DEMO2
package com.example.democrud.democurd.controller;
import oracle.jdbc.driver.OracleConnection;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtil {
private static String DRIVER="com.mysql.cj.jdbc.Driver";
private static String URL="jdbc:mysql://127.0.0.1:3306/atguigudb?serverTimezone=UTC&nullCatalogMeansCurrent=true&RemarksReporting=true";
private static String USER = "root";
private static String PASS = "root";
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(URL,USER,PASS);
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Object o){
if (o == null){
return;
}
if (o instanceof ResultSet){
try {
((ResultSet)o).close();
} catch (SQLException e) {
e.printStackTrace();
}
} else if(o instanceof Statement){
try {
((Statement)o).close();
} catch (SQLException e) {
e.printStackTrace();
}
} else if (o instanceof Connection){
Connection c = (Connection)o;
try {
if (!c.isClosed()){
c.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt,
Connection conn){
close(rs);
close(stmt);
close(conn);
}
public static void close(ResultSet rs,
Connection conn){
close(rs);
close(conn);
}
public static void getDataBaseInfo() {
Connection conn = getConnection();
ResultSet rs = null;
try{
DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("数据库已知的用户: "+ dbmd.getUserName());
System.out.println("数据库的系统函数的逗号分隔列表: "+ dbmd.getSystemFunctions());
System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ dbmd.getTimeDateFunctions());
System.out.println("数据库的字符串函数的逗号分隔列表: "+ dbmd.getStringFunctions());
System.out.println("数据库供应商用于 'schema' 的首选术语: "+ dbmd.getSchemaTerm());
System.out.println("数据库URL: " + dbmd.getURL());
System.out.println("是否允许只读:" + dbmd.isReadOnly());
System.out.println("数据库的产品名称:" + dbmd.getDatabaseProductName());
System.out.println("数据库的版本:" + dbmd.getDatabaseProductVersion());
System.out.println("驱动程序的名称:" + dbmd.getDriverName());
System.out.println("驱动程序的版本:" + dbmd.getDriverVersion());
System.out.println("数据库中使用的表类型");
rs = dbmd.getTableTypes();
while (rs.next()) {
System.out.println(rs.getString("TABLE_TYPE"));
}
}catch (SQLException e){
e.printStackTrace();
} finally{
JdbcUtil.close(rs,conn);
}
}
public static void getSchemasInfo(){
Connection conn = getConnection();
ResultSet rs = null;
try{
DatabaseMetaData dbmd = conn.getMetaData();
rs = dbmd.getSchemas();
while (rs.next()){
String tableSchem = rs.getString("TABLE_SCHEM");
System.out.println(tableSchem);
}
} catch (SQLException e){
e.printStackTrace();
} finally{
JdbcUtil.close(rs,conn);
}
}
public static void getTablesList() {
Connection conn = getConnection();
ResultSet rs = null;
try {
DatabaseMetaData dbmd = conn.getMetaData();
String[] types = { "TABLE" };
rs = dbmd.getTables(null, null, "%", types);
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
String tableType = rs.getString("TABLE_TYPE");
String remarks = rs.getString("REMARKS");
System.out.println(tableName + " - " + tableType + " - " + remarks);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
JdbcUtil.close(rs,conn);
}
}
public static void getTablesInfo(){
Connection conn = getConnection();
ResultSet rs = null;
try {
DatabaseMetaData dbmd = conn.getMetaData();
rs = dbmd.getTables(null, null, "countries", new String[]{"TABLE","VIEW"});
while(rs.next()){
String tableCat = rs.getString("TABLE_CAT");
String tableSchemaName = rs.getString("TABLE_SCHEM");
String tableName = rs.getString("TABLE_NAME");
String tableType = rs.getString("TABLE_TYPE");
String remarks = rs.getString("REMARKS");
System.out.println(tableCat + " - " + tableSchemaName + " - " +tableName + " - " + tableType + " - "
+ remarks);
}
} catch (Exception ex) {
ex.printStackTrace();
}finally{
JdbcUtil.close(rs,conn);
}
}
public static void getPrimaryKeysInfo() {
Connection conn = getConnection();
ResultSet rs = null;
try{
DatabaseMetaData dbmd = conn.getMetaData();
rs = dbmd.getPrimaryKeys(null, null, "CUST_INTER_TF_SERVICE_REQ");
while (rs.next()){
String tableCat = rs.getString("TABLE_CAT");
String tableSchemaName = rs.getString("TABLE_SCHEM");
String tableName = rs.getString("TABLE_NAME");
String columnName = rs.getString("COLUMN_NAME");
short keySeq = rs.getShort("KEY_SEQ");
String pkName = rs.getString("PK_NAME");
System.out.println(tableCat + " - " + tableSchemaName + " - " + tableName + " - " + columnName + " - "
+ keySeq + " - " + pkName);
}
}catch (SQLException e){
e.printStackTrace();
}finally{
JdbcUtil.close(rs,conn);
}
}
public static void getIndexInfo() {
Connection conn = getConnection();
ResultSet rs = null;
try{
DatabaseMetaData dbmd = conn.getMetaData();
rs = dbmd.getIndexInfo(null, null, "CUST_INTER_TF_SERVICE_REQ", false, true);
while (rs.next()){
String tableCat = rs.getString("TABLE_CAT");
String tableSchemaName = rs.getString("TABLE_SCHEM");
String tableName = rs.getString("TABLE_NAME");
boolean nonUnique = rs.getBoolean("NON_UNIQUE");
String indexQualifier = rs.getString("INDEX_QUALIFIER");
String indexName = rs.getString("INDEX_NAME");
short type = rs.getShort("TYPE");
short ordinalPosition = rs.getShort("ORDINAL_POSITION");
String columnName = rs.getString("COLUMN_NAME");
String ascOrDesc = rs.getString("ASC_OR_DESC");
int cardinality = rs.getInt("CARDINALITY");
int pages = rs.getInt("PAGES");
String filterCondition = rs.getString("FILTER_CONDITION");
System.out.println(tableCat + " - " + tableSchemaName + " - " + tableName + " - " + nonUnique + " - "
+ indexQualifier + " - " + indexName + " - " + type + " - " + ordinalPosition + " - " + columnName
+ " - " + ascOrDesc + " - " + cardinality + " - " + pages + " - " + filterCondition);
}
} catch (SQLException e){
e.printStackTrace();
} finally{
JdbcUtil.close(rs,conn);
}
}
public static void getColumnsInfo(){
Connection conn = getConnection();
ResultSet rs = null;
try{
DatabaseMetaData dbmd = conn.getMetaData();
rs =dbmd.getColumns(null, null, "countries", null);
while(rs.next()){
String tableCat = rs.getString("TABLE_CAT");
String tableSchemaName = rs.getString("TABLE_SCHEM");
String tableName_ = rs.getString("TABLE_NAME");
String columnName = rs.getString("COLUMN_NAME");
int dataType = rs.getInt("DATA_TYPE");
String dataTypeName = rs.getString("TYPE_NAME");
int columnSize = rs.getInt("COLUMN_SIZE");
int decimalDigits = rs.getInt("DECIMAL_DIGITS");
int numPrecRadix = rs.getInt("NUM_PREC_RADIX");
int nullAble = rs.getInt("NULLABLE");
String remarks = rs.getString("REMARKS");
String columnDef = rs.getString("COLUMN_DEF");
int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH");
int ordinalPosition = rs.getInt("ORDINAL_POSITION");
String isNullAble = rs.getString("IS_NULLABLE");
System.out.println(tableCat + " - " + tableSchemaName + " - " + tableName_ + " - " + columnName +
" - " + dataType + " - " + dataTypeName + " - " + columnSize + " - " + decimalDigits + " - "
+ numPrecRadix + " - " + nullAble + " - " + remarks + " - " + columnDef + " - " + charOctetLength
+ " - " + ordinalPosition + " - " + isNullAble );
}
}catch(SQLException ex){
ex.printStackTrace();
}finally{
JdbcUtil.close(rs,conn);
}
}
public static void main(String[] args) {
getDataBaseInfo();
getSchemasInfo();
System.out.println("--------");
getTablesList();
System.out.println("--------");
getTablesInfo();
getPrimaryKeysInfo();
getIndexInfo();
System.out.println("--------");
getColumnsInfo();
}
}
执行结果为
D:\工作磁盘\java环境\jdk1.8.0_181\bin\java.exe "-javaagent:D:\工作磁盘\java环境\idea\IntelliJ IDEA 2021.3.1\lib\idea_rt.jar=64076:D:\工作磁盘\java环境\idea\IntelliJ IDEA 2021.3.1\bin" -Dfile.encoding=UTF-8 -classpath D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\charsets.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\deploy.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\access-bridge-32.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\dnsns.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\jaccess.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\localedata.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\nashorn.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunec.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\ext\zipfs.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\javaws.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jce.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jfr.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jfxswt.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\jsse.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\management-agent.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\plugin.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\resources.jar;D:\工作磁盘\java环境\jdk1.8.0_181\jre\lib\rt.jar;D:\工作磁盘\yanwc_code\springboot-daily-crud-record\target\classes;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-jdbc\2.1.7.RELEASE\spring-boot-starter-jdbc-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter\2.1.7.RELEASE\spring-boot-starter-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot\2.1.7.RELEASE\spring-boot-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-logging\2.1.7.RELEASE\spring-boot-starter-logging-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-jdbc\5.1.9.RELEASE\spring-jdbc-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-beans\5.1.9.RELEASE\spring-beans-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-tx\5.1.9.RELEASE\spring-tx-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-thymeleaf\2.1.7.RELEASE\spring-boot-starter-thymeleaf-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\thymeleaf\thymeleaf-spring5\3.0.11.RELEASE\thymeleaf-spring5-3.0.11.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\thymeleaf\thymeleaf\3.0.11.RELEASE\thymeleaf-3.0.11.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-web\2.1.7.RELEASE\spring-boot-starter-web-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-json\2.1.7.RELEASE\spring-boot-starter-json-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\core\jackson-databind\2.9.9\jackson-databind-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\core\jackson-core\2.9.9\jackson-core-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.9\jackson-datatype-jdk8-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.9\jackson-datatype-jsr310-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.9\jackson-module-parameter-names-2.9.9.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-starter-tomcat\2.1.7.RELEASE\spring-boot-starter-tomcat-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.22\tomcat-embed-core-9.0.22.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.22\tomcat-embed-el-9.0.22.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.22\tomcat-embed-websocket-9.0.22.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\hibernate\validator\hibernate-validator\6.0.17.Final\hibernate-validator-6.0.17.Final.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-web\5.1.9.RELEASE\spring-web-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-webmvc\5.1.9.RELEASE\spring-webmvc-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-aop\5.1.9.RELEASE\spring-aop-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-context\5.1.9.RELEASE\spring-context-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-expression\5.1.9.RELEASE\spring-expression-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-core\5.1.9.RELEASE\spring-core-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\spring-jcl\5.1.9.RELEASE\spring-jcl-5.1.9.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.1.0\mybatis-spring-boot-starter-2.1.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.1.0\mybatis-spring-boot-autoconfigure-2.1.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\mybatis\3.5.2\mybatis-3.5.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\mybatis\mybatis-spring\2.0.2\mybatis-spring-2.0.2.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-beanutils\commons-beanutils\1.8.0\commons-beanutils-1.8.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-lang\commons-lang\2.5\commons-lang-2.5.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\net\sf\ezmorph\ezmorph\1.0.6\ezmorph-1.0.6.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\webjars\jquery\3.3.0\jquery-3.3.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\webjars\bootstrap\4.0.0\bootstrap-4.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\webjars\npm\popper.js\1.11.1\popper.js-1.11.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-configuration-processor\2.1.7.RELEASE\spring-boot-configuration-processor-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\mysql\mysql-connector-java\8.0.18\mysql-connector-java-8.0.18.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-boot-starter\3.3.1\mybatis-plus-boot-starter-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus\3.3.1\mybatis-plus-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-extension\3.3.1\mybatis-plus-extension-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-core\3.3.1\mybatis-plus-core-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\baomidou\mybatis-plus-annotation\3.3.1\mybatis-plus-annotation-3.3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\github\jsqlparser\jsqlparser\3.1\jsqlparser-3.1.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.7.RELEASE\spring-boot-autoconfigure-2.1.7.RELEASE.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\ojdbc8\19.3.0.0\ojdbc8-19.3.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\ucp\19.3.0.0\ucp-19.3.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\oraclepki\19.3.0.0\oraclepki-19.3.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\osdt_cert\19.3.0.0\osdt_cert-19.3.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\osdt_core\19.3.0.0\osdt_core-19.3.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\simplefan\19.3.0.0\simplefan-19.3.0.0.jar;D:\工作磁盘\java环境\maven\apache-maven-3.6.3-bin\repository\com\oracle\ojdbc\ons\19.3.0.0\ons-19.3.0.0.jar com.example.democrud.democurd.controller.JdbcUtil
数据库已知的用户: root@localhost
数据库的系统函数的逗号分隔列表: DATABASE,USER,SYSTEM_USER,SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION
数据库的时间和日期函数的逗号分隔列表: DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,PERIOD_ADD,PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT,CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,NOW,SYSDATE,CURRENT_TIMESTAMP,UNIX_TIMESTAMP,FROM_UNIXTIME,SEC_TO_TIME,TIME_TO_SEC
数据库的字符串函数的逗号分隔列表: ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,CONCAT_WS,CONV,ELT,EXPORT_SET,FIELD,FIND_IN_SET,HEX,INSERT,INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LOCATE,LOWER,LPAD,LTRIM,MAKE_SET,MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,QUOTE,REPEAT,REPLACE,REVERSE,RIGHT,RPAD,RTRIM,SOUNDEX,SPACE,STRCMP,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING_INDEX,TRIM,UCASE,UPPER
数据库供应商用于 'schema' 的首选术语:
数据库URL: jdbc:mysql://127.0.0.1:3306/atguigudb?serverTimezone=UTC&nullCatalogMeansCurrent=true&RemarksReporting=true
是否允许只读:false
数据库的产品名称:MySQL
数据库的版本:8.0.29
驱动程序的名称:MySQL Connector/J
驱动程序的版本:mysql-connector-java-8.0.18 (Revision: fef2894d751d47223192b706977b4a5bc41e6be4)
数据库中使用的表类型
LOCAL TEMPORARY
SYSTEM TABLE
SYSTEM VIEW
TABLE
VIEW
--------
countries - TABLE -
departments - TABLE -
employees - TABLE -
job_grades - TABLE -
job_history - TABLE -
jobs - TABLE -
locations - TABLE -
order - TABLE -
regions - TABLE -
--------
atguigudb - null - countries - TABLE -
--------
atguigudb - null - countries - country_id - 1 - CHAR - 2 - 0 - 10 - 0 - - null - 6 - 1 - NO
atguigudb - null - countries - country_name - 12 - VARCHAR - 40 - 0 - 10 - 1 - - null - 120 - 2 - YES
atguigudb - null - countries - region_id - 4 - INT - 10 - 0 - 10 - 1 - - null - 0 - 3 - YES
Process finished with exit code 0
main 方法启动类:在最后 
本文都是以为 mysql 8.0 为主的 同时也注释了5.7的版本和参数;
|