当前位置: 首页 > 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. 保存和加载模…...

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

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

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...