当前位置: 首页 > news >正文

JAVA根据表名获取Oracle表结构信息

响应实体封装

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author CQY* @version 1.0* @date 2024/8/15 16:33**/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OracleTableInfo {private static final long serialVersionUID = -2767767791747125388L;/*** 序号*/private int columnId;/*** 表英文名称*/private String tableName;/*** 表注释*/private String tableComment;/*** 字段英文名*/private String columnName;/*** 字段中文名称*/private String columnComment;/*** 字段类型*/private String fieldType;/*** java对应字段类型*/private String columnClassName;/*** 主键*/private String primaryKey;/*** 空值验证*/private String allowNull;/*** 备注*/private String remarks;
}

JDBC工具类

import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import oracle.jdbc.OracleBfile;
import oracle.jdbc.OracleBlob;
import oracle.jdbc.OracleClob;
import oracle.jdbc.OracleNClob;import java.math.BigDecimal;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author CQY* @version 1.0* @date 2024/8/15 16:38**/
public class JDBCUtils {/*** ORACLE数据类型映射*/public static final Map<String, String> ORACLE_TYPE_MAP = new HashMap<>();static {ORACLE_TYPE_MAP.put("NVARCHAR2", String.class.getName());ORACLE_TYPE_MAP.put("VARCHAR2", String.class.getName());ORACLE_TYPE_MAP.put("CHAR", String.class.getName());ORACLE_TYPE_MAP.put("NCHAR", String.class.getName());ORACLE_TYPE_MAP.put("LONG", String.class.getName());ORACLE_TYPE_MAP.put("NUMBER", BigDecimal.class.getName());ORACLE_TYPE_MAP.put("FLOAT", BigDecimal.class.getName());ORACLE_TYPE_MAP.put("CLOB", OracleClob.class.getName());ORACLE_TYPE_MAP.put("NCLOB", OracleNClob.class.getName());ORACLE_TYPE_MAP.put("BLOB", OracleBlob.class.getName());ORACLE_TYPE_MAP.put("TIMESTAMP", Timestamp.class.getName());ORACLE_TYPE_MAP.put("DATE", Timestamp.class.getName());ORACLE_TYPE_MAP.put("RAW", byte[].class.getName());ORACLE_TYPE_MAP.put("LONG RAW", byte[].class.getName());ORACLE_TYPE_MAP.put("BFILE", OracleBfile.class.getName());}/*** 根据表名获取Oracle表结构信息** @param table    表名* @param url      数据库连接URL* @param user     数据库用户名* @param password 数据库密码* @return 返回表结构信息列表*/@SuppressWarnings("all")public static List<OracleTableInfo> getTableInfo(String table, String url, String user, String password) {List<OracleTableInfo> tableInfoList = new ArrayList<>();Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {Class.forName("oracle.jabc.driver.OracleDriver");conn = DriverManager.getConnection(url, user, password);String sql = "SELECT T1.TABLE_NAME,\n" +"       NVL(T2.COMMENTS, '')                         AS TAB_COMMENTS,\n" +"       T1.COLUMN_NAME,\n" +"       T3.COMMENTS                                  AS COL_COMMENTS,\n" +"       T1.DATA_TYPE ,\n" +"       T1.NULLABLE,\n" +"       T4.CONSTRAINT_NAME,\n" +"       T1.COLUMN_ID\n" +"FROM USER_TAB_COLUMNS T1\n" +"         LEFT JOIN USER_TAB_COMMENTS T2 ON T1.TABLE_NAME = T2.TABLE_NAME AND T2.TABLE_TYPE = 'TABLE'\n" +"         LEFT JOIN USER_COL_COMMENTS T3 ON T1.TABLE_NAME = T3.TABLE_NAME AND T1.COLUMN_NAME = T3.COLUMN_NAME\n" +"         LEFT JOIN (SELECT CONS.CONSTRAINT_NAME, CONS.TABLE_NAME, COLUS.COLUMN_NAME\n" +"                    FROM USER_CONSTRAINTS CONS\n" +"                             INNER JOIN USER_CONS_COLUMNS COLUS ON CONS.CONSTRAINT_NAME = COLUS.CONSTRAINT_NAME\n" +"                    WHERE CONS.CONSTRAINT_TYPE = 'P') T4\n" +"                   ON T1.TABLE_NAME = T4.TABLE_NAME AND T1.COLUMN_NAME = T4.COLUMN_NAME\n" +"WHERE T1.TABLE_NAME = ? \n" +"ORDER BY T1.COLUMN_ID";ps = conn.prepareStatement(sql);ps.setString(1, table);rs = ps.executeQuery();while (rs.next()) {final String constraintName = StrUtil.nullToEmpty(rs.getString("CONSTRAINT_NAME"));String primaryKey = "No";if (StrUtil.isNotBlank(constraintName)) {primaryKey = StrUtil.format("Yes({})", constraintName);}final String tableName = StrUtil.nullToEmpty(rs.getString("TABLE_NAME")).toUpperCase();final String columnComment = StrUtil.nullToEmpty(rs.getString("COL_COMMENTS"));String nullable = StrUtil.nullToEmpty(rs.getString("NULLABLE"));String dataType = StrUtil.nullToEmpty(rs.getString("DATA_TYPE"));if (dataType.contains("TIMESTAMP")) {dataType = "TIMESTAMP";}final String columnclassName = MapUtil.getStr(ORACLE_TYPE_MAP, dataType, "");final OracleTableInfo tableInfo = OracleTableInfo.builder().columnId(rs.getInt("COLUMN_ID")).tableName(tableName).tableComment(StrUtil.nullToEmpty(rs.getString("TAB_COMMENTS"))).columnName(StrUtil.nullToEmpty(rs.getString("COLUMN_NAME"))).columnComment(columnComment).fieldType(dataType).columnClassName(columnclassName).primaryKey(primaryKey).allowNull(nullable).remarks("").build();tableInfoList.add(tableInfo);}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {try {if (rs != null) {rs.close();}if (ps != null) {ps.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}return tableInfoList;}
}

Oracle 查询SQL

SELECT T1.TABLE_NAME,NVL(T2.COMMENTS, '')  AS TAB_COMMENTS,T1.COLUMN_NAME,T3.COMMENTS AS COL_COMMENTS,T1.DATA_TYPE,T1.NULLABLE,T4.CONSTRAINT_NAME,T1.COLUMN_ID
FROM USER_TAB_COLUMNS T1LEFT JOIN USER_TAB_COMMENTS T2 ON T1.TABLE_NAME = T2.TABLE_NAME AND T2.TABLE_TYPE = 'TABLE'LEFT JOIN USER_COL_COMMENTS T3 ON T1.TABLE_NAME = T3.TABLE_NAME AND T1.COLUMN_NAME = T3.COLUMN_NAMELEFT JOIN (SELECT CONS.CONSTRAINT_NAME, CONS.TABLE_NAME, COLUS.COLUMN_NAMEFROM USER_CONSTRAINTS CONSINNER JOIN USER_CONS_COLUMNS COLUS ON CONS.CONSTRAINT_NAME = COLUS.CONSTRAINT_NAMEWHERE CONS.CONSTRAINT_TYPE = 'P') T4ON T1.TABLE_NAME = T4.TABLE_NAME AND T1.COLUMN_NAME = T4.COLUMN_NAME
WHERE T1.TABLE_NAME = ?
ORDER BY T1.COLUMN_ID

MySQL实现SQL

-- 表结构
SELECT T1.TABLE_NAME,                   -- 表名T2.TABLE_COMMENT,                -- 表的注释T1.COLUMN_NAME,                  -- 列名T1.COLUMN_COMMENT,               -- 列的注释T1.DATA_TYPE,                    -- 数据类型T1.IS_NULLABLE,                  -- 是否允许为空T1.ORDINAL_POSITION AS COLUMN_ID -- 列的顺序位置
FROM INFORMATION_SCHEMA.COLUMNS T1LEFT JOIN INFORMATION_SCHEMA.TABLES T2 ON T1.TABLE_SCHEMA = T2.TABLE_SCHEMA AND T1.TABLE_NAME = T2.TABLE_NAME
WHERE T1.TABLE_NAME = ? -- 过滤出指定的表
ORDER BY T1.ORDINAL_POSITION  -- 按列的顺序位置排序-- 主外键查询
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
where TABLE_NAME = ?
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
where TABLE_NAME = ?

相关文章:

JAVA根据表名获取Oracle表结构信息

响应实体封装 import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;/*** author CQY* version 1.0* date 2024/8/15 16:33**/ Data NoArgsConstructor AllArgsConstructor Builder public class OracleTableInfo …...

网络性能优化

网络性能优化是确保网络稳定性、速度和可靠性的关键步骤。优化过程通常包括诊断问题、识别瓶颈以及实施具体的解决方案。以下是关于如何进行网络性能优化的详细指南&#xff1a; 一、问题诊断 网络性能监控 网络流量分析工具&#xff1a;使用Wireshark、NetFlow、Ntop等工具监…...

[C++String]接口解读,深拷贝和浅拷贝,string的模拟实现

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…...

理性看待、正确理解 AI 中的 Scaling “laws”

编者按&#xff1a;LLMs 规模和性能的不断提升&#xff0c;让人们不禁产生疑问&#xff1a;这种趋势是否能一直持续下去&#xff1f;我们是否能通过不断扩大模型规模最终实现通用人工智能&#xff08;AGI&#xff09;&#xff1f;回答这些问题对于理解 AI 的未来发展轨迹至关重…...

【OCR 学习笔记】二值化——全局阈值方法

二值化——全局阈值方法 固定阈值方法Otsu算法在OpenCV中的实现固定阈值Otsu算法 图像二值化&#xff08;Image Binarization&#xff09;是指将像素点的灰度值设为0或255&#xff0c;使图像呈现明显的黑白效果。二值化一方面减少了数据维度&#xff0c;另一方面通过排除原图中…...

Java - IDEA开发

使用IDEA开发Java程序步骤&#xff1a; 创建工程 Project&#xff1b;创建模块 Module&#xff1b;创建包 Package&#xff1b;创建类&#xff1b;编写代码&#xff1b; 如何查看JDK版本 Package介绍: package是将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、…...

Oracle(62)什么是内存优化表(In-Memory Table)?

内存优化表&#xff08;In-Memory Table&#xff09;是指将表的数据存储在内存中&#xff0c;以提高数据访问和查询性能的一种技术。内存优化表通过利用内存的高速访问特性&#xff0c;显著减少I/O操作的延迟&#xff0c;提升数据处理的速度。这种技术在需要高性能数据处理的应…...

#window家庭版安装hyper-v#

由于window 11 家庭版没有hyper-v虚拟机服务&#xff0c;则需要安装一下&#xff0c;使用如下操作 1:新建一个txt文件&#xff0c;拷贝如下脚本到里面 pushd "%\~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in (findst…...

【云原生】Pass容器研发基础——汇总篇

云原生基础汇总 系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了云计算学习的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;每个知识点的修正和深入主要参考各平台大佬的文章&#xff0c…...

【Py/Java/C++三种语言详解】LeetCode743、网络延迟时间【单源最短路问题Djikstra算法】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读一、题目描述二、题目解析三、参考代码PythonJavaC 时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 相关推荐阅读 …...

交替输出

交替输出 题目&#xff1a;线程 1 输出 a 5 次&#xff0c;线程 2 输出 b 5 次&#xff0c;线程 3 输出 c 5 次。现在要求输出 abcabcabcabcabc wait notify 版 public class SyncWaitNotify {private volatile int flag;private volatile int loopNumber;public SyncWaitNo…...

JS(三)——更改html内数据

获取 DOM 元素&#xff0c;然后修改其属性或内容。使用 getElementById 方法获取特定 ID 的元素&#xff1a; <p id"myParagraph">这是初始的文本</p> const paragraph document.getElementById(myParagraph); paragraph.innerHTML 这是修改后的文本…...

CSS小玩意儿:文字适配背景

一&#xff0c;效果 二&#xff0c;代码 1&#xff0c;搭个框架 添加一张背景图片&#xff0c;在图片中显示一行文字。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" conte…...

C++:平衡二叉搜索树之红黑树

一、红黑树的概念 红黑树&#xff0c; 和AVL都是二叉搜索树&#xff0c; 红黑树通过在每个节点上增加一个储存位表示节点的颜色&#xff0c; 可以是RED或者BLACK&#xff0c; 通过任何一条从根到叶子的路径上各个节点着色方式的限制&#xff0c;红黑树能够确保没有一条路径会比…...

CentOS 7 系统优化

CentOS 7 系统优化 1、配置YUM源 阿里云的YUM源配置&#xff1a; CentOS 7使用以下命令&#xff1a; sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoCentOS 8使用以下命令&#xff1a; sudo wget -O /etc/yum.repos.d/CentOS…...

扫雷游戏——附源代码

扫雷游戏的源代码比较简单&#xff0c;不设计比较复杂的代码&#xff0c;主要是多个函数的组合&#xff0c;每个函数执行自己的功能&#xff0c;最终支持游戏的完成。 1.菜单 我们需要一个提醒信息来让用户进行选择。 void menu() {printf("***********************\n&…...

Vue3列表(List)

效果如下图&#xff1a;在线预览 APIs List 参数说明类型默认值bordered是否展示边框booleanfalsevertical是否使用竖直样式booleanfalsesplit是否展示分割线booleantruesize列表尺寸‘small’ | ‘middle’ | ‘large’‘middle’loading是否加载中booleanfalsehoverable是否…...

HarmonyOS NEXT - Navigation组件封装BaseNavigation

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新&#xff0c;请前往github查看最新代码 在demo中这些组件和工具类都通过module实现了&#xff0c;具体可以参考HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils 官方介绍 组件导航 (Navigation)(推…...

浅看MySQL数据库

有这么一句话&#xff1a;“一个不会数据库的程序员不是合格的程序员”。有点夸张&#xff0c;但是确是如此。透彻学习数据库是要学习好多知识&#xff0c;需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西&#xff0c;跟着小编一起来看一下吧。 什么是数据…...

Pytorch常用训练套路框架(CPU)

文章目录 1. 数据准备示例&#xff1a;加载 CIFAR-10 数据集 2. 模型定义示例&#xff1a;定义一个简单的卷积神经网络 3. 损失函数和优化器示例&#xff1a;定义损失函数和优化器 4. 训练循环示例&#xff1a;训练循环 5. 评估和测试示例&#xff1a;评估模型 6. 保存和加载模…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...