jdbc获取mysql数据表的字段和对应的数据类型

最近在做项目的时候因为经常会碰到代码在开发环境可以正常运行,但是到了测试和预生产环境运行报错,但是测试环境和预生产环境的网络与本地是隔离的,无法直接连接数据库,于是想到了把数据拷贝一份到开发环境来,但是有些表的字段两三百个,手工拷贝实在太浪费时间精力,还容易出错,于是就想到了提供一个接口,传入表表名和字段名以及字段值来查询需要的数据然后生成insert语句,拿到开发环境来执行,这个过程的思路如下:

1、获取数据表的元数据,也就是字段名和对应的数据类型

2、查询一个样例数据(目标数据)

3、拼装insert语句返回

这里的重难点在第一步,一共有三种方式如下:

第一种:通过DatabaseMetaData metaData = connection.getMetaData();来获取

    public static void main(String[] args) throws Exception {String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test";String userName = "root";String password = "tianjun";List<String> columns = new LinkedList<>();try (Connection connection = DriverManager.getConnection(jdbcUrl, userName, password)) {DatabaseMetaData metaData = connection.getMetaData();ResultSet rs = metaData.getColumns(null, "test", "int_test_1", null);while (rs.next()) {String columnName = rs.getString("COLUMN_NAME");String dataType = rs.getString("TYPE_NAME");columns.add(columnName);System.out.println("Column Name: " + columnName + ", Data Type: " + dataType.split(" ")[0]);}} catch (SQLException e) {e.printStackTrace();}System.err.println(columns.size());}

这种方式我在本地跑的好好的,但是到了测试环境和预生产环境会导致columns 的数据量翻倍,没找到原因

第二种:通过SHOW COLUMNS FROM TABLE_NAM或者DESCRIBE TABLE_NAME

    public static void main(String[] args) throws Exception {String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test";String userName = "root";String password = "tianjun";List<String> columns = new LinkedList<>();try (Connection connection = DriverManager.getConnection(jdbcUrl, userName, password)) {DatabaseMetaData metaData = connection.getMetaData();
//          String columnSql="DESCRIBE int_test_1";String columnSql = "SHOW COLUMNS FROM int_test_1";
//            ResultSet rs = metaData.getColumns(null, "test", "int_test_1", null);ResultSet rs = connection.prepareStatement(columnSql).executeQuery();while (rs.next()) {String columnName = rs.getString("Field");String dataType = rs.getString("Type");columns.add(columnName);System.out.println("Column Name: " + columnName + ", Data Type: " + dataType.split(" ")[0]);}} catch (SQLException e) {e.printStackTrace();}System.err.println(columns.size());}

第三种:从information_schema库去查:SELECT COLUMN_name,data_type FROM information_schema.columns where table_name='int_test_1';

但是这种查出来的顺序与建表语句不一样,所以就没有用这种了,最终采用的是第二种方式

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

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

相关文章

锐捷配置PVLAN

一、实验拓扑 二、实验目的 PVLAN可以通过主VLAN和辅助VLAN的概念&#xff0c;部署隔离技术&#xff0c;实现用户间的互访控制。 三、实验配置 SW2 Ruijie >enable Ruijie #configure terminal Ruijie (config)#vlan 20 Ruijie (config-vlan)#private-vlan community …

视频号小店如何运营?流程跑通就成功了一大半!

我是电商珠珠 视频号小店是视频号团队发展的电商平台&#xff0c;目前处于项目的风口期&#xff0c;很多有想法的新手并不知道应该怎么去运营&#xff0c;今天我就来给大家讲一下。 一、入驻 视频号小店入驻的门槛较高&#xff0c;需要准备一张企业的营业执照&#xff0c;身…

Drupal 远程代码执行 CVE-2019-6340 已亲自复现

Drupal 远程代码执行 CVE-2019-6340 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建 修复建议总结 漏洞名称 漏洞描述 Drupal是一个开源且以PHP语言写成的内容管理框架(CMF) 研究人员发现Drupal存在安全漏洞(CVE-2019-6340)&#xff0c;当攻击者以PATCH或POST方式传送…

MySQL NULL值处理

关于 NULL 的条件比较运算是比较特殊的。你不能使用 NULL 或 ! NULL 在列中查找 NULL 值 。 在 MySQL 中&#xff0c;NULL 值与任何其它值的比较&#xff08;即使是 NULL&#xff09;永远返回 NULL&#xff0c;即 NULL NULL 返回 NULL 。 MySQL 中处理 NULL 使用 IS NULL 和…

拥抱数字化转型,共赢数字时代 | 创维汽车商学院走进竹云

数字化浪潮汹涌而来&#xff0c;变革与创新接踵而至。随着数字技术日益融入经济社会发展的各个领域&#xff0c;数字经济与实体经济的“双向奔赴”也不断催生着新产业、新业态、新模式&#xff0c;为经济社会发展持续注入创新活力。12月19日&#xff0c;创维汽车商学院带领嘉宾…

Git版本控制系统:简介、演变与优缺点

目录 前言1 版本控制概述2 集中式版本控制的优缺点2.1 优点2.2 缺点 3 分布式版本控制的优缺点3.1 优点3.2 缺点 4 Git的发展过程结语 前言 在软件开发和团队协作中&#xff0c;版本控制是至关重要的。它允许开发人员跟踪文件的更改历史&#xff0c;协同工作并管理代码的不同版…

Shell编程自动化之特殊Shell扩展变量

1.变量的处理 1.1 如果parameter变量值为空&#xff0c;那么返回str字符串。 ${parameter:-str} 1.2 如果parameter变量值为空&#xff0c;那么str替代变量值&#xff0c;且返回其值。 ${parameter:str} 1.3 如果parameter变量值为空&#xff0c;那么str当作stderr输出&am…

【华为机试】2023年真题B卷(python)-乘坐保密电梯

一、题目 题目描述&#xff1a; 有一座保密大楼&#xff0c;你从0楼到达指定楼层m&#xff0c;必须这样的规则乘坐电梯:给定一个数字序列&#xff0c;每次根据序列中的数字n上升n层或者下降n层&#xff0c;前后两次操作的方向必须相反&#xff0c;规定首次的方向向上&#xff0…

亚马逊撸货、撸卡怎么做成功率更高?教你解决亚马逊撸货的底层环境

在当前的跨境电商环境下&#xff0c;许多人都在从事亚马逊的撸货、撸卡业务&#xff0c;但亚马逊的风控系统非常严格&#xff0c;因此很容易被封号或订单被取消。为了提高成功率&#xff0c;我们需要采取一些措施和方法。这篇文章就来分享做亚马逊撸货、撸卡如何提高成功率&…

Multi-value PBS

参考文献&#xff1a; [CIM19] Carpov S, Izabachne M, Mollimard V. New techniques for multi-value input homomorphic evaluation and applications[C]//Topics in Cryptology–CT-RSA 2019: The Cryptographers’ Track at the RSA Conference 2019, San Francisco, CA, …

RocketMQ系统性学习-RocketMQ高级特性之消息存储的高效与刷盘策略、Broker 快速读取消息机制

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

探索Qt 6.3:了解基本知识点和新特性

学习目标&#xff1a; 理解Qt6.3的基本概念和框架&#xff1a;解释Qt是什么&#xff0c;它的核心思想和设计原则。学会安装和配置Qt6.3开发环境&#xff1a;提供详细的步骤&#xff0c;让读者能够顺利安装和配置Qt6.3的开发环境。掌握Qt6.3的基本编程技巧&#xff1a;介绍Qt6.…

AI百模大战:引领未来的技术巅峰

这场竞争不仅是技术的角逐&#xff0c;更是对AI行业未来的探索和引领。本文将探讨在这场大战中AI行业所经历的新趋势&#xff0c;涵盖技术进步、应用拓展、行业变革以及人才竞争等多个方面。 技术进步&#xff1a;穿越技术的时空隧道 AI技术的进步如同穿越时空隧道&#xff0c…

图灵日记之java奇妙历险记--数据类型与变量运算符

目录 数据类型与变量字面常量数据类型变量语法格式整型变量浮点型变量字符型变量希尔型变量类型转换自动类型转换(隐式)强制类型转换(显式) 类型提升不同数据类型的运算小于4字节数据类型的运算 字符串类型 运算符算术运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非…

Open3D 入门教程

文章目录 1、概述2、安装3、点云读写4、点云可视化 4.1、可视化单个点云4.2、同一窗口可视化多个点云4.3、 可视化的属性设置 5、k-d tree 与 Octree 5.1、k-d tree5.2、Octree 5.2.1、从点云中构建Octree5.2.2、从体素栅格中构建 Octree 6、点云滤波 6.1、体素下采样6.2、统计…

webpack学习-7.创建库

webpack学习-7.创建库 1.暴露库1.1概念1.2验证1.2.1 不导出方法1.2.2 导出方法 2.外部化 lodash3.外部化的限制4.最终步骤5.使用自己的库5.1坑 6.总结 1.暴露库 这个模块学习有点坑。看名字就是把自己写的个包传到npm&#xff0c;而且还要在项目中使用到它&#xff0c;支持各种…

function的使用

函数的返回值为integer 函数的返回值为clogb2 对于一个输入数据&#xff0c;如果其值大于0&#xff0c;右移1位&#xff0c;返回值加1&#xff1b; 再次判断右移后的结果任然大于0&#xff0c;返回值继续加1。 直到不满足判断条件&#xff0c;计算出一个输入数据的二进制位宽。…

yocto系列讲解[实战篇]93 - 添加Qtwebengine和Browser实例

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述集成meta-qt5移植过程中的问题问题1:virtual/libgl set to mesa, not mesa-gl问题2:dmabuf-server-buffer tries to use undecl…

Peter算法小课堂—贪心与二分

太戈编程655题 题目描述&#xff1a; 有n辆车大甩卖&#xff0c;第i辆车售价a[i]元。有m个人带着现金来申请购买&#xff0c;第i个到现场的人带的现金为b[i]元&#xff0c;只能买价格不超过其现金额的车子。你是大卖场总经理&#xff0c;希望将车和买家尽量多地进行一对一配对…

记录一下gradle编译问题

由于C盘爆满,删除了一些文件,没注意把.gradle里的文件也给删了,结果就是编译报错. 但是studio啥也没提示,看了log才知道是jar包没了,但是呢又不自动下载. 我的做法是直接删除.gradle\caches文件夹,但是这个代价太高了 后来我发现是把 .gradle\caches\modules-2\files-2.1\org…