JDBC元数据操作(一)-- DatabaseMetaData接口详解

转自: https://blog.csdn.net/chen_zw/article/details/18816599 

 

1. 前言
    在JDBC技术规范中,提供了Connection,Statement,ResultSet这三个开发过程中经常用到的接口。针对与每个接口,JDBC规范提供了相应的接口描述对象,也就是xxxMetaData系列描述对象。DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文只讲解DatabaseMetaData接口获取元数据的方法。

本文地址:http://blog.csdn.net/chen_zw/article/details/18816599

2. 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); //获取表列信息

3. Demo封装演示:
package com.util;
 
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;
 
import oracle.jdbc.driver.OracleConnection;
 
/**
 * @Description: JDBC操作元数据示例-- DatabaseMetaData接口
 * @CreateTime: 2014-1-19 下午9:46:44
 * @author: chenzw 
 * @version V1.0
 */
public class JdbcUtil {
    //获得驱动  
    private static String DRIVER = "oracle.jdbc.driver.OracleDriver";  
    //获得url  
    private static String URL = "jdbc:oracle:thin:@localhost:test";  
    //获得连接数据库的用户名  
    private static String USER = "root";  
    //获得连接数据库的密码  
    private static String PASS = "root";  
 
    static {  
        try {   
            //初始化JDBC驱动并让驱动加载到jvm中  
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        }  
    }  
    
    public static Connection getConnection(){  
        Connection conn = null;  
        try {   
            //连接数据库  
            
           /*
            * 设置可获取REMARK备注信息
           Properties props =new Properties();
           props.put("remarksReporting","true");
           props.put("user", USER);
           props.put("password", PASS);
           conn =DriverManager.getConnection(URL,props);*/
            
            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);  
    }  
    
    
    
    /**
     * @Description: 获取数据库相关信息
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午5:09:12 
     * @throws
     */
    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);
        } 
    } 
    
    /**
     * @Description:获得数据库中所有Schemas(对应于oracle中的Tablespace)
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午5:10:35 
     * @throws
     */
    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);
        }  
    }  
    
    /**
     * @Description: 获取数据库中所有的表信息
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午5:08:28 
     * @throws
     */
    public static void getTablesList() {  
        Connection conn =  getConnection();
        ResultSet rs = null;
        try {  
            /**
             * 设置连接属性,使得可获取到表的REMARK(备注)
             */
            ((OracleConnection)conn).setRemarksReporting(true); 
            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);
        } 
    }  
    
    /**
     * @Description: 获取某表信息
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午3:26:30 
     * @throws
     */
    public static void getTablesInfo(){
        Connection conn =  getConnection();
        ResultSet rs = null;
        try {
            /**
             * 设置连接属性,使得可获取到表的REMARK(备注)
             */
            ((OracleConnection)conn).setRemarksReporting(true); 
            DatabaseMetaData dbmd = conn.getMetaData();
            /**
             * 获取给定类别中使用的表的描述。
             * 方法原型:ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types);
             * catalog - 表所在的类别名称;""表示获取没有类别的列,null表示获取所有类别的列。
             * schema - 表所在的模式名称(oracle中对应于Tablespace);""表示获取没有模式的列,null标识获取所有模式的列; 可包含单字符通配符("_"),或多字符通配符("%");
             * tableNamePattern - 表名称;可包含单字符通配符("_"),或多字符通配符("%");
             * types - 表类型数组; "TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM";null表示包含所有的表类型;可包含单字符通配符("_"),或多字符通配符("%"); 
             */
            rs = dbmd.getTables(null, null, "CUST_INTER_TF_SERVICE_REQ", new String[]{"TABLE","VIEW"}); 
 
 
            while(rs.next()){
                 String tableCat = rs.getString("TABLE_CAT");  //表类别(可为null) 
                 String tableSchemaName = rs.getString("TABLE_SCHEM");//表模式(可能为空),在oracle中获取的是命名空间,其它数据库未知     
                 String tableName = rs.getString("TABLE_NAME");  //表名  
                 String tableType = rs.getString("TABLE_TYPE");  //表类型,典型的类型是 "TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM"。
                 String remarks = rs.getString("REMARKS");       //表备注  
                 
                 System.out.println(tableCat + " - " + tableSchemaName + " - " +tableName + " - " + tableType + " - " 
                        + remarks);  
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            JdbcUtil.close(rs,conn);
        }
    }
 
    /**
     * @Description: 获取表主键信息
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午5:12:53 
     * @throws
     */
    public static void getPrimaryKeysInfo() {  
        Connection conn =  getConnection();
        ResultSet rs = null;
        try{  
            DatabaseMetaData dbmd = conn.getMetaData();
            /**
             * 获取对给定表的主键列的描述
             * 方法原型:ResultSet getPrimaryKeys(String catalog,String schema,String table);
             * catalog - 表所在的类别名称;""表示获取没有类别的列,null表示获取所有类别的列。
             * schema - 表所在的模式名称(oracle中对应于Tablespace);""表示获取没有模式的列,null标识获取所有模式的列; 可包含单字符通配符("_"),或多字符通配符("%");
             * table - 表名称;可包含单字符通配符("_"),或多字符通配符("%");
             */
            rs = dbmd.getPrimaryKeys(null, null, "CUST_INTER_TF_SERVICE_REQ");  
            
            while (rs.next()){  
                String tableCat = rs.getString("TABLE_CAT");  //表类别(可为null) 
                String tableSchemaName = rs.getString("TABLE_SCHEM");//表模式(可能为空),在oracle中获取的是命名空间,其它数据库未知     
                String tableName = rs.getString("TABLE_NAME");  //表名  
                String columnName = rs.getString("COLUMN_NAME");//列名  
                short keySeq = rs.getShort("KEY_SEQ");//序列号(主键内值1表示第一列的主键,值2代表主键内的第二列)  
                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);
        }
    }  
    
    /**
     * @Description: 获取表索引信息
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午5:12:04 
     * @throws
     */
    public static void getIndexInfo() { 
        Connection conn =  getConnection();
        ResultSet rs = null;
        try{  
            DatabaseMetaData dbmd = conn.getMetaData();
            /**
             * 获取给定表的索引和统计信息的描述
             * 方法原型:ResultSet getIndexInfo(String catalog,String schema,String table,boolean unique,boolean approximate)
             * catalog - 表所在的类别名称;""表示获取没有类别的列,null表示获取所有类别的列。
             * schema - 表所在的模式名称(oracle中对应于Tablespace);""表示获取没有模式的列,null标识获取所有模式的列; 可包含单字符通配符("_"),或多字符通配符("%");
             * table - 表名称;可包含单字符通配符("_"),或多字符通配符("%");
             * unique - 该参数为 true时,仅返回唯一值的索引; 该参数为 false时,返回所有索引;
             * approximate - 该参数为true时,允许结果是接近的数据值或这些数据值以外的值;该参数为 false时,要求结果是精确结果;
             */
            rs = dbmd.getIndexInfo(null, null, "CUST_INTER_TF_SERVICE_REQ", false, true);  
            while (rs.next()){  
                String tableCat = rs.getString("TABLE_CAT");  //表类别(可为null) 
                String tableSchemaName = rs.getString("TABLE_SCHEM");//表模式(可能为空),在oracle中获取的是命名空间,其它数据库未知     
                String tableName = rs.getString("TABLE_NAME");  //表名  
                boolean nonUnique = rs.getBoolean("NON_UNIQUE");// 索引值是否可以不唯一,TYPE为 tableIndexStatistic时索引值为 false;
                String indexQualifier = rs.getString("INDEX_QUALIFIER");//索引类别(可能为空),TYPE为 tableIndexStatistic 时索引类别为 null; 
                String indexName = rs.getString("INDEX_NAME");//索引的名称 ;TYPE为 tableIndexStatistic 时索引名称为 null;
                /**
                 * 索引类型: 
                 *  tableIndexStatistic - 此标识与表的索引描述一起返回的表统计信息 
                 *  tableIndexClustered - 此为集群索引 
                 *  tableIndexHashed - 此为散列索引 
                 *  tableIndexOther - 此为某种其他样式的索引 
                 */
                short type = rs.getShort("TYPE");//索引类型;
                short ordinalPosition = rs.getShort("ORDINAL_POSITION");//在索引列顺序号;TYPE为 tableIndexStatistic 时该序列号为零;
                String columnName = rs.getString("COLUMN_NAME");//列名;TYPE为 tableIndexStatistic时列名称为 null;
                String ascOrDesc = rs.getString("ASC_OR_DESC");//列排序顺序:升序还是降序[A:升序; B:降序];如果排序序列不受支持,可能为 null;TYPE为 tableIndexStatistic时排序序列为 null;
                int cardinality = rs.getInt("CARDINALITY");   //基数;TYPE为 tableIndexStatistic 时,它是表中的行数;否则,它是索引中唯一值的数量。   
                int pages = rs.getInt("PAGES"); //TYPE为 tableIndexStatisic时,它是用于表的页数,否则它是用于当前索引的页数。
                String filterCondition = rs.getString("FILTER_CONDITION"); //过滤器条件,如果有的话(可能为 null)。
                
                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);
        }  
    }  
    
     
    /**
     * @Description: 获取表中列值信息
     * @author: chenzw 
     * @CreateTime: 2014-1-27 下午2:55:56 
     * @throws
     */
    public static void getColumnsInfo(){
        Connection conn =  getConnection();
        ResultSet rs = null;
        
        try{
            /**
             * 设置连接属性,使得可获取到列的REMARK(备注)
             */
            ((OracleConnection)conn).setRemarksReporting(true); 
            DatabaseMetaData dbmd = conn.getMetaData();
            /**
             * 获取可在指定类别中使用的表列的描述。
             * 方法原型:ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern)
             * catalog - 表所在的类别名称;""表示获取没有类别的列,null表示获取所有类别的列。
             * schema - 表所在的模式名称(oracle中对应于Tablespace);""表示获取没有模式的列,null标识获取所有模式的列; 可包含单字符通配符("_"),或多字符通配符("%");
             * tableNamePattern - 表名称;可包含单字符通配符("_"),或多字符通配符("%");
             * columnNamePattern - 列名称; ""表示获取列名为""的列(当然获取不到);null表示获取所有的列;可包含单字符通配符("_"),或多字符通配符("%");
             */
            rs =dbmd.getColumns(null, null, "CUST_INTER_TF_SERVICE_REQ", null);
            
            while(rs.next()){
                String tableCat = rs.getString("TABLE_CAT");  //表类别(可能为空)                  
                String tableSchemaName = rs.getString("TABLE_SCHEM");  //表模式(可能为空),在oracle中获取的是命名空间,其它数据库未知     
                String tableName_ = rs.getString("TABLE_NAME");  //表名  
                String columnName = rs.getString("COLUMN_NAME");  //列名  
                int dataType = rs.getInt("DATA_TYPE");     //对应的java.sql.Types的SQL类型(列类型ID)     
                String dataTypeName = rs.getString("TYPE_NAME");  //java.sql.Types类型名称(列类型名称)
                int columnSize = rs.getInt("COLUMN_SIZE");  //列大小  
                int decimalDigits = rs.getInt("DECIMAL_DIGITS");  //小数位数 
                int numPrecRadix = rs.getInt("NUM_PREC_RADIX");  //基数(通常是10或2) --未知
                /**
                 *  0 (columnNoNulls) - 该列不允许为空
                 *  1 (columnNullable) - 该列允许为空
                 *  2 (columnNullableUnknown) - 不确定该列是否为空
                 */
                int nullAble = rs.getInt("NULLABLE");  //是否允许为null  
                String remarks = rs.getString("REMARKS");  //列描述  
                String columnDef = rs.getString("COLUMN_DEF");  //默认值  
                int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH");    // 对于 char 类型,该长度是列中的最大字节数 
                int ordinalPosition = rs.getInt("ORDINAL_POSITION");   //表中列的索引(从1开始)  
                /** 
                 * ISO规则用来确定某一列的是否可为空(等同于NULLABLE的值:[ 0:'YES'; 1:'NO'; 2:''; ])
                 * YES -- 该列可以有空值; 
                 * NO -- 该列不能为空;
                 * 空字符串--- 不知道该列是否可为空
                 */  
                String isNullAble = rs.getString("IS_NULLABLE");  
                  
                /** 
                 * 指示此列是否是自动递增 
                 * YES -- 该列是自动递增的
                 * NO -- 该列不是自动递增
                 * 空字串--- 不能确定该列是否自动递增
                 */  
                //String isAutoincrement = rs.getString("IS_AUTOINCREMENT");   //该参数测试报错    
                
                
                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);
        }
    }
    
    /**
     * @Description: TODO
     * @author: chenzw 
     * @CreateTime: 2014-1-17 下午2:47:45
     * @param args 
     * @throws 
     */
    public static void main(String[] args) {
        getDataBaseInfo();  //获取数据库信息
        getSchemasInfo(); //获取数据库所有Schema
        getTablesList();  //获取某用户下所有的表
        getTablesInfo();  //获取表信息
        getPrimaryKeysInfo(); //获取表主键信息
        getIndexInfo();  //获取表索引信息
        getColumnsInfo(); //获取表中列值信息
    }
}
Note: (1)JDBC元数据的操作是很消耗性能的,所以应尽量避免使用。
(2)在获取元数据中的REMARK(即 备注)前,需要设置RemarksReporting属性为true,否则获取到的REMARK属性都是null,设置该属性有两种方法,请参阅上面的Demo。


————————————————
版权声明:本文为CSDN博主「夜之子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chen_zw/article/details/18816599

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot核心配置

转载自 Spring Boot核心配置 启动类 在包根目录下添加启动类,必须包含main方法,再添加Spring Boot启动方法: SpringApplication.run(SampleController.class, args); 或者流式API new SpringApplicationBuilder().run(args); 下面是一个典型的…

空心三角形

Problem Description 把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效…

Dom4j完整教程详解

转自: https://blog.csdn.net/qq_41860497/article/details/84339091 目录 1、DOM4J简介 2、XML文档操作1 2.1、读取XML文档: 2.2、获取根节点 2.3、. 新增一个节点以及其下的子节点与数据 2.4、 写入XML文件 2. 5、 遍历xml节点 2.6、创建xml文件 2.…

Spring Boot功能实战

转载自 Spring Boot功能实战 添加web功能启动器 添加了Spring Boot基础依赖后&#xff0c;如要使用web mvc功能&#xff0c;只需要添加如下启动器即可&#xff0c;Spring Boot会自动装配web功能。 <dependencies><dependency><groupId>org.springframework.b…

scanf用法总结

转载自&#xff1a;http://blog.csdn.net/21aspnet/article/details/174326函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,…]);scanf()函数是通用终端格式化输入函数&#xff0c;它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类…

Spring Boot Runner启动器

转载自 Spring Boot Runner启动器 Runner启动器 如果你想在Spring Boot启动的时候运行一些特定的代码&#xff0c;你可以实现接口 ApplicationRunner或者 CommandLineRunner&#xff0c;这两个接口实现方式一样&#xff0c;它们都只提供了一个run方法。 CommandLineRunner&…

spring的PathMatchingResourcePatternResolver基于ant通配符匹配路径遍历项目所有xml文件

【1】代码 public class MybatisTest9_spring {/*** 遍历所有xml文件 */Test public void dom4j_test2() { System.out.println("dom4j_test2"); ResourcePatternResolver loader new PathMatchingResourcePatternResolver();try {Resource[] resources loader.…

Spring Cloud是什么,和Dubbo对比呢?

转载自 Spring Cloud是什么&#xff0c;和Dubbo对比呢&#xff1f; 简介 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c…

think-in-java(21)并发

【README】 并发后半部分&#xff08;并发2&#xff0c;从21.4.3中断开始&#xff09;参见&#xff1a; https://blog.csdn.net/PacosonSWJTU/article/details/106878087 ; 本文章包括了并发1和并发2 &#xff0c;期初新建并发2是为了方便编写文档&#xff0c;因为并发内容实…

POJ3904(dfs)

Promble Description 定义一个二维数组&#xff1a; int maze[5][5] {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,}; 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走的路&#xff0c;只能横着走或竖着走&#xff0c;不能斜…

SpringCloud注册中心高可用搭建

转载自 SpringCloud注册中心高可用搭建Spring Cloud的注册中心可以由Eureka、Consul、Zookeeper、ETCD等来实现&#xff0c;这里推荐使用Spring Cloud Eureka来实现注册中心&#xff0c;它基于Netfilix的Eureka做了二次封装&#xff0c;完成分布式服务中服务治理的功能&#xf…

吃透 | Elasticsearch filter和query的不同

少啰嗦&#xff0c;直接看东西。——罗永浩 1、query和filter的本质区别&#xff1f; 以下几张图能更好的概括&#xff1a; query关注点&#xff1a;此文档与此查询子句的匹配程度如何&#xff1f; filter关注点&#xff1a;此文档和查询子句匹配吗&#xff1f; 2、Query检索…

SpringCloud服务安全连接

转载自 SpringCloud服务安全连接Spring Cloud可以增加HTTP Basic认证来增加服务连接的安全性。 1、加入security启动器 在maven配置文件中加入Spring Boot的security启动器。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

HDU1232

Problem Description 某省调查城镇交通状况&#xff0c;得到现有城镇道路统计表&#xff0c;表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通&#xff08;但不一定有直接的道路相连&#xff0c;只要互相间接通过道路可达即可…

elasticsearch7常见查询(term、match、bool、filter)

一、精准查询termterm是代表完全匹配&#xff0c;即不进行分词器分析&#xff0c;文档中必须包含整个搜索的词汇 1、term单值 字段只有一个值时候&#xff0c;用term关键词查询 查询biz_id值为1909190023901225的记录 curl -XGET http://192.168.1.73:9200/xyerp/order/_sea…

SpringCloud Eureka自我保护机制

转载自 SpringCloud Eureka自我保护机制自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的&#xff0c;没有ZK中角色的概念&#xff0c; 即使N-1个节点挂掉也不会影响其他节点的正常运行。 默认情况下&#xff0c;如果Eureka Server在一定时间内&#xf…

HikariCP-史上最快速的连接池

转载自 HikariCP&#xff0d;史上最快速的连接池 背景 我们知道的连接池有C3P0,DBCP,它们都比较成熟稳定&#xff0c;但性能不是十分好。 所以有了BoneCP这个连接池&#xff0c;它是一个高速、免费、开源的JAVA连接池&#xff0c;它的性能几乎是C3P0、DBCP的25倍&#xff0c;十…

一起来学ES —— 浅谈Nested结构

Nested是什么? 直观的说&#xff0c;Nested实际上就是Object的数组。如下&#xff0c;这个user就是个nested结构 { "user" : [ {"first" : "John","last" : "Smith"},{"first" : "Alice","last…

并集查经典(转发)

首先在地图上给你若干个城镇&#xff0c;这些城镇都可以看作点&#xff0c;然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点&#xff0c;让你判断它们是否连通&#xff0c;或者问你整幅图一共有几个连通分支&#xff0c;也…

关于es查询dsl的filter与must,term与match的区别

【1】创建es7 索引 put localhost:9200/pdi_cust &#xff0c; 注意 PUB_CUST_LABEL 字段分词了。 es7 不支持type &#xff0c;所以 无需指定type。 { "mappings" :{ "properties":{"RCRD_ID":{"type":"keyword"…