package com.nf.lc.sql_meta_data;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* 获得数据库表的元数据
*/
public class GetSQLMetaData { public static void main(String[] args) throws SQLException, ClassNotFoundException { HashMap<String, Object> computer_mall = (HashMap<String, Object>) getDatabaseNameToTableNameAndColumnName("computer_mall"); Set<String> tableNames = computer_mall.keySet();
System.out.println("一共有表:" + tableNames.size() + "张");
for (String tableName : tableNames) {
System.out.println("===========================\r\n");
System.out.println("表名:" + tableName); // <字段名,类型> HashMap 集合
HashMap<String, String> columnNames = (HashMap<String, String>) computer_mall.get(tableName); Set<String> columns = columnNames.keySet(); for (String column : columns) {
System.out.println("字段名:" + column + " 类型:" + columnNames.get(column));
} System.out.println("===========================\r\n");
} } public static Map getDatabaseNameToTableNameAndColumnName(String databaseName) throws SQLException, ClassNotFoundException { String driver = "org.mariadb.jdbc.Driver";
String url = "jdbc:mariadb://localhost:3306/" + databaseName;
String username = "root";
String password = "root";
Map<String, Object> tableNameMap = new HashMap<>(); //加载驱动
Class.forName(driver); //获得数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
//获得元数据
DatabaseMetaData metaData = connection.getMetaData();
//获得表信息
ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"}); while (tables.next()) {
Map<String, String> columnNameMap = new HashMap<>(); //保存字段名 //获得表名
String table_name = tables.getString("TABLE_NAME");
//通过表名获得所有字段名
ResultSet columns = metaData.getColumns(null, null, table_name, "%");
//获得所有字段名
while (columns.next()) {
//获得字段名
String column_name = columns.getString("COLUMN_NAME");
//获得字段类型
String type_name = columns.getString("TYPE_NAME"); columnNameMap.put(column_name, type_name);
} tableNameMap.put(table_name, columnNameMap); } return tableNameMap;
} }

关于获得数据库相关信息:

       String driver = "org.mariadb.jdbc.Driver";
String url = "jdbc:mariadb://localhost:3306/" + databaseName;
String username = "root";
String password = "root"; //加载驱动
Class.forName(driver); //获得数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
//获得元数据
DatabaseMetaData metaData = connection.getMetaData(); //获得数据库名称
String databaseProductName = metaData.getDatabaseProductName(); //获得数据库版本号
String databaseProductVersion = metaData.getDatabaseProductVersion(); //获得数据库用户名
String userName = metaData.getUserName(); //获得数据库连接URL
String jdbcUrl = metaData.getURL(); //获得数据库驱动
String driverName = metaData.getDriverName(); //获得数据库驱动版本号
String driverVersion = metaData.getDriverVersion();

归途(LC)

java 通过数据库名获得 该数据所有的表名以及字段名、字段类型的更多相关文章

  1. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

  2. 笔记:EF出现列名 'Discriminator' 无效、类没有加入数据库上下文也被数据迁移生成表

    笔记: EF出现列名 'Discriminator' 无效: 类没有加入数据库上下文也被数据迁移生成表: 出现该问题一般是使用了某个基类继承了实体类: 原因是code first的POCO实体对象的继 ...

  3. EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用

    做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...

  4. [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序

    程序下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 原理:Oracle的Insert al ...

  5. java向数据库插入N条数据

    为了测试mysql的索引,要向数据库先插入上万条数据,然后再测试.手动插入太麻烦,写了一段代码. 先上代码: package action; import java.sql.Connection; i ...

  6. java实现数据库之间批量插入数据

    package comnf147Package; import java.sql.*; public class DateMigrationLagou { //连接SQLite private Con ...

  7. 用Java向数据库中插入大量数据时的优化

    使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...

  8. BCP批量导入数据时候如何处理表中自动增加的字段

    大容量导入数据时保留标识值 (SQL Server) http://msdn.microsoft.com/zh-cn/library/ms186335(v=sql.120).aspx 使用格式化文件跳 ...

  9. SQL Server 复制表结构以及数据,去除表中重复字段

    --复制另一个数据库中的某张表的结构及数据--select * from Test.dbo.TestTable(查询表中所有数据) --into [表名] 插入当前数据库新表,如果没有该表就创建 se ...

随机推荐

  1. Exit of “> ” mode in Unix shell

    https://unix.stackexchange.com/questions/118209/exit-of-mode-in-unix-shell ^D will only work if a pr ...

  2. docker---安装docker

    今天开始要初步的学习 docker 了,这也是进入虚拟化方向的一个步骤,学习一个东西首先要从搭建环境开始,哈哈 安装环境及版本: 系统:Ubuntu18.04 STL Docker 版本:19.03. ...

  3. sublime text2设置快捷键打开浏览器

    1 编辑一个py文件,内容如下: import sublime, sublime_plugin import webbrowser url_map = { 'C:\\server\\www\\' : ...

  4. Python中的encode和decode

    原文地址:http://www.cnblogs.com/tingyugetc/p/5727383.html 1.Python3中对文本和二进制数据进行了比较清晰的区分,文本总是 unicode ,由  ...

  5. hasura graphql-engine v1.2.0 beta 版本

    hasura graphql-engine v1.2.0 提供了一个很不错的功能action,这个也是目前其他graphql 没有hasura 强大的 地方,使用action 我们可以更好的扩展has ...

  6. py02_01:初识模块

    模块的定义:模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.(可以理解为:库) 模块分为三类 ( 1. 标准库:     直接导入使用 ...

  7. java复制对象,复制对象属性,只可复制两个对象想同的属性名。也可自定义只复制需要的属性。

    注意:使用时copy()方法只会复制相同的属性.常用的copy()方法.以下为封装的工具和使用方式. 1.封装类 import java.util.Map; import java.util.Weak ...

  8. MySql索引基本

    1.什么是索引 索引用于快速找出在某个列中有一特定值的行.如果不使用索引,需要遍历整张表,表越大查询耗时越大: MySQL中的索引的存储类型有两种:BTREE.HASH.具体实现机制参照另一篇博客: ...

  9. tensorflow slim训练以及到安卓部署教程

    https://blog.csdn.net/chenyuping333/article/details/81537551 https://blog.csdn.net/u012328159/articl ...

  10. quartz定时定时任务执行两次

    quartz框架没问题. 流程: sping-quartz配置 <?xml version="1.0" encoding="UTF-8"?> < ...