原生Jdbc获取库、表、字段;驼峰与下划线转换

1、获取catalog

1)代码如下:

/**
     * 获取catalog
     *
     * @param jdbcdriver 驱动类(DriverClass)(com.mysql.cj.jdbc.Driver)
     * @param url        地址(jdbc:mysql://10.20.30.40:3306)
     * @param username   用户名
     * @param password   密码
     */
    public static List<String> getCatalogs(String jdbcdriver, String url, String username, String password) throws ClassNotFoundException, SQLException {
        ArrayList<String> list = new ArrayList<>();
        //    1、加载驱动
        Class.forName(jdbcdriver);
        //    2、建立连接
        Connection conn = DriverManager.getConnection(url, username, password);
        try {
            DatabaseMetaData metaData = conn.getMetaData();
            ResultSet resultSet = metaData.getCatalogs();
            while (resultSet.next()) {
                String string = resultSet.getString("TABLE_CAT");
                list.add(string);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            conn.close();
        }
        return list;
    }

2)main方法调用

public static void main(String[] args) throws Exception {
        String driver = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://127.0.0.1:3306";
        String user = "root";
        String password = "root3306";
        //获取catalog
        List<String> catalogs = getCatalogs(driver, url, user, password);
        catalogs.stream().forEach(item-> System.out.println(item));
    }

3)请求结果:

2、获取表

 1)代码如下:

/**
     * 获取表
     *
     * @param jdbcdriver 驱动类(DriverClass)(com.mysql.cj.jdbc.Driver)
     * @param url        地址(jdbc:mysql://10.20.30.40:3306)
     * @param username   用户名
     * @param password   密码
     * @param catalogs   catalogs
     * @param database   数据库
     */
    public static List<String> getTables(String jdbcdriver, String url, String username, String password, String catalogs, String database) throws ClassNotFoundException, SQLException {
        List<String> list = new ArrayList<>();
        //    1、加载驱动
        Class.forName(jdbcdriver);
        //    2、建立连接
        Connection conn = DriverManager.getConnection(url, username, password);
        try {
            DatabaseMetaData metaData = conn.getMetaData();
            ResultSet tables = metaData.getTables(
                    catalogs,
                    database,
                    "%",
                    new String[]{"TABLE", "VIEW"});
            while (tables.next()) {
                String name = tables.getString("TABLE_NAME");
                list.add(name);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            conn.close();
        }
        return list;
    }

2)main方法调用

public static void main(String[] args) throws Exception {
        String driver = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://127.0.0.1:3306";
        String user = "root";
        String password = "root3306";
        //获取表名
        List<String> tables = getTables(driver, url, user, password, "mybatis_plus", "mybatis_plus");
        tables.stream().forEach(item-> System.out.println(item));
    }

3)请求结果:

 3、获取字段

 1)代码如下:

/**
     * 获取字段
     *
     * @param jdbcdriver 驱动类(DriverClass)(com.mysql.cj.jdbc.Driver)
     * @param url        地址(jdbc:mysql://10.20.30.40:3306)
     * @param username   用户名
     * @param password   密码
     * @param catalogs   catalogs
     * @param database   库
     * @param table      表
     */
    public static List<JSONObject> getColumns(String jdbcdriver, String url, String username, String password, String catalogs, String database, String table) throws ClassNotFoundException, SQLException, SQLException {
        List<JSONObject> list = new ArrayList<>();
        //    1、加载驱动
        Class.forName(jdbcdriver);
        //    2、建立连接
        Connection conn = DriverManager.getConnection(url, username, password);
        try {
            DatabaseMetaData metaData = conn.getMetaData();
            ResultSet rs = metaData.getColumns(catalogs, database, table, "%");
            while (rs.next()) {
                JSONObject json = new JSONObject();
                //  列明
                json.put("columnName", toCamelCase(rs.getString("COLUMN_NAME")));
                //  列类型
                json.put("typeName", rs.getString("TYPE_NAME"));
                //  列备注
                json.put("remarks", rs.getString("REMARKS"));
                list.add(json);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conn.close();
        }
        return list;
    }

2)main方法调用

public static void main(String[] args) throws Exception {
        String driver = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://127.0.0.1:3306";
        String user = "root";
        String password = "root3306";
        //获取字段
        List<JSONObject> columns = getColumns(driver, url, user, password, "mybatis_plus", "mybatis_plus", "sys_user");
        columns.stream().forEach(item-> System.out.println(item));
    }

3)请求结果:

4、实现驼峰式(类名)命名和下划线(数据库)命名之间的转化

1)下划线转驼峰

/**
     * 下划线转驼峰
     */
    public static String toCamelCase(String s) {
        if (s == null) {
            return null;
        }

        //s = s.toLowerCase();

        StringBuilder sb = new StringBuilder(s.length());

        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++) {
            // 找字符
            char c = s.charAt(i);
            // 如果是下划线
            if (c == '_') {
                // 将大写设置为true
                upperCase = true;
            } else if (upperCase) {
                // 下次转换首字母
                sb.append(Character.toUpperCase(c));
                // 将大写设置为false
                upperCase = false;
            } else {
                // 追加
                sb.append(c);
            }
        }
        return sb.toString();
    }

2)驼峰转下划线


import java.util.regex.Matcher;
import java.util.regex.Pattern;
    /**
     * 驼峰转下划线
     */
    public static String ToUnderScoreCaseString(String s) {
        if (s == null) {
            return null;
        }
        Pattern compile = Pattern.compile("[A-Z]");
        Matcher matcher = compile.matcher(s);
        StringBuffer sb = new StringBuffer();
        while(matcher.find()) {
            //将匹配到的大写字符转换成小写,并且在前面添加下划线然后添加到缓冲区。group(0)在没有分配组的时候匹配所有符合的
            matcher.appendReplacement(sb,  "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[acm算法学习] 后缀数组SA

学习自B站up主 kouylan 定义 后缀是包含最后个字母的子串 把字符串 str 的所有后缀按字典排序&#xff0c;sa[i]表示排名为 i 的后缀的开头下标 如何求解SA 倍增的方法 先把每个位置开始的长度为1的子串排序&#xff0c;在此基础上再把长度为2的子串排序&#xff08;长度…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-7 LQR控制器 Linear Quadratic Regulator

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-7 LQR控制器 Linear Quadratic Regulator 线性控制器设计-轨迹跟踪&#xff08;Fellow a Desired Path&#xff09;

软件测试|如何实现字典的键值互换,你会了吗?

简介 在Python中&#xff0c;字典是一种非常有用的数据结构&#xff0c;它将数据存储为键值对&#xff0c;并且键必须是唯一的。有时候&#xff0c;我们可能需要将字典的键和值互换&#xff0c;以便查找或操作数据更加方便。本文将详细介绍如何在Python中实现字典键值的互换操…

【Effective Objective - C】—— 熟悉Objective-C

【Effective Objective - C】—— 熟悉Objective-C 熟悉Objective-C1.oc的起源消息和函数的区别运行期组件和内存管理要点&#xff1a; 2.在类的头文件中尽量少引入其他头文件向前声明要点&#xff1a; 3.多使用字面量语法&#xff0c;少用与之等价的方法字符串字面量字面数值字…

AntDesignBlazor示例——暗黑模式

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/BlazorDemo 1. 学习目标 暗黑模式切换查找组件样式覆写组件样式 2. 添加暗黑模式切换组件 1&#xff09;双击打开MainL…

在CMake中自定义宏 add_definitions(-DDEBUG)

hehedalinux:~/Linux/loveDBTeacher-v6$ tree . ├── CMakeLists.txt └── test.c0 directories, 2 files hehedalinux:~/Linux/loveDBTeacher-v6$ test.c #include <stdio.h> #define NUMBER 3int main() {int a 10; #ifdef DEBUGprintf("我是一个程序猿,我…

驾驭未来:从传统运维到智能化运维的转型之路

随着科技的飞速发展&#xff0c;企业的业务需求也在不断变化。为了满足这些需求&#xff0c;企业的IT架构逐渐向云原生、容器化和微服务化演进。作为支撑企业业务发展的运维人员&#xff0c;我们需要紧跟时代步伐&#xff0c;不断提升自己的技能和认知水平。 在2023年全球运维大…

评估LLM在细胞数据上的实用性(3)-基因层面的评估

目录 定义基因功能预测扰动预测基因网络分析 基因层面的评估基因功能预测扰动预测基因网络分析 定义 基因功能预测 基因功能预测对于识别基因在不同条件下的特性非常重要。因为人类大约有20,000个蛋白质编码基因&#xff0c;只有一些被标注了功能。对基因功能的准确预测可以帮…

CMake在静态库中链接静态库

hehedalinux:~/Linux/multi-v2$ tree . ├── calc │ ├── add.cpp │ ├── CMakeLists.txt │ ├── div.cpp │ ├── mult.cpp │ └── sub.cpp ├── CMakeLists.txt ├── include │ ├── calc.h │ └── sort.h ├── lib │ ├── l…

【WEB API自动化测试】接口文档与在线测试

这一篇我们主要介绍如何做API帮助文档&#xff0c;给API的调用人员介绍各个 API的功能, 输入参数&#xff0c;输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档及在线测试最终达到的效果: 概要图 GET API 添加产品API: 删除…

flutter使用get库管理路由,并设页面跳转动画和常见动画

get库还是非常强大的一个仓库&#xff0c;里面包含了非常常用的一些方法&#xff0c;比如路由管理&#xff0c;这是最常见和最常用的一个功能了&#xff0c;我们可以先配置一个路由对象&#xff0c;然后在里面配置路由列表&#xff0c;并且设置路由跳转方式。 第一种方式&…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑦

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷7 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷7 模块一 …

jetson orin nano 使用yolov8导出engine

1. 导出onnx 经过前面训练&#xff0c;得到了best.pt模型&#xff0c;现在想要使用tensorrt进行推理&#xff0c;需要先导出为onnx格式&#xff0c;再转化为engine格式。 yolo export modelbest.pt formatonnx opset12 simplifyTrue2.解决错误 在导出过程中&#xff0c;可能…

postman 之 接口请求

一、前言 1. 安装 2. 主界面 3. 请求区域 Body下主要包含以下4中格式 form-data&#xff1a;混合表单&#xff0c;支持上传文件x-www-form-urlencoded&#xff1a;文本表单raw&#xff1a;原始格式&#xff0c;支持JSON/XML格式&#xff08;后面可选择&#xff09;binary&am…

Linux进阶课:目录(文件夹)与文件操作

1、ls与cat的区别是是什么&#xff1f; 答&#xff1a;ls命令的含义是list&#xff0c;显示当前目录中内容。不加参数时它显示当前目录中除隐藏文件外的所有文件及目录的名字。 cat命令是linux下的一个文本输出命令&#xff0c;通常是用于查看某个文件的内容的。 2、[abc]这个…

只不过孤岛罢了:我的2023年总结

2023已悄然过去&#xff0c;还记得跨年夜那天&#xff0c;我突然接到一星期要期末考的消息&#xff0c;我的内心是多么奔溃&#xff0c;先不说一天一门强度如此之高&#xff0c;重要的是矩阵论&#xff0c;工程优化等等科目&#xff0c;还要速成&#xff0c;于是麻木得预习一日…

Servlet-体系结构

一、思考 读者阅读完上一篇关于Servlet基本概念的文章后&#xff0c;我们知道每次实现一个Servlet&#xff0c;都需要覆盖五个接口&#xff0c;我们对除service接口外的其它四个接口&#xff0c;我们通常不会做什么处理。那么&#xff0c;这种实现方式是否有些繁琐呢&#xff…

MT36291 2.5A 高效的1.2MHz电流模式升压转换器 DCDC管理芯片 航天民芯

描述 MT36291是一个恒定频率、6引脚SOT23电流模式升压转换器&#xff0c;旨在用于小型、低功耗的应用。MT36291的开关频率为1.2MHz&#xff0c;并允许使用2mm或更低高度的微小、低成本的电容器和电感器。内部软启动导致注入电流小&#xff0c;延长电池寿命。MT36291的特点是在光…

【数据结构Java版】对象的比较之Comparable与Comparator比较器

目录 一、基本类型的比较 二、对象类型的比较 &#xff08;1&#xff09;对象类型比较出现的问题 &#xff08;2&#xff09;重写基类equals方法 &#xff08;3&#xff09;基于Comparable接口的比较 1.实现Comparable接口&#xff0c;重写compareTo方法 &#xff08;4&a…

C++力扣题目501--二叉搜索树中的众数

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…