java 通过数据库名获得 该数据所有的表名以及字段名、字段类型
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 通过数据库名获得 该数据所有的表名以及字段名、字段类型的更多相关文章
- MySQL 查询某个数据库中所有包含数据记录的表名
MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...
- 笔记:EF出现列名 'Discriminator' 无效、类没有加入数据库上下文也被数据迁移生成表
笔记: EF出现列名 'Discriminator' 无效: 类没有加入数据库上下文也被数据迁移生成表: 出现该问题一般是使用了某个基类继承了实体类: 原因是code first的POCO实体对象的继 ...
- EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用
做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...
- [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序
程序下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 原理:Oracle的Insert al ...
- java向数据库插入N条数据
为了测试mysql的索引,要向数据库先插入上万条数据,然后再测试.手动插入太麻烦,写了一段代码. 先上代码: package action; import java.sql.Connection; i ...
- java实现数据库之间批量插入数据
package comnf147Package; import java.sql.*; public class DateMigrationLagou { //连接SQLite private Con ...
- 用Java向数据库中插入大量数据时的优化
使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...
- BCP批量导入数据时候如何处理表中自动增加的字段
大容量导入数据时保留标识值 (SQL Server) http://msdn.microsoft.com/zh-cn/library/ms186335(v=sql.120).aspx 使用格式化文件跳 ...
- SQL Server 复制表结构以及数据,去除表中重复字段
--复制另一个数据库中的某张表的结构及数据--select * from Test.dbo.TestTable(查询表中所有数据) --into [表名] 插入当前数据库新表,如果没有该表就创建 se ...
随机推荐
- 吴裕雄--天生自然 JAVA开发学习:正则表达式
import java.util.regex.*; class RegexExample1{ public static void main(String args[]){ String conten ...
- SSM到Spring Boot-校园商铺平台
第04章 店铺注册功能模块 4-3 Thumbnailator图片处理和封装Util[通过java代码实现给图片打上水印] 4-3 Thumbnailator图片处理和封装Util[通过java代码实 ...
- UML-领域模型-添加关联和属性
1.何谓关联? 关联(association):一个类的全局变量引用了另一个类,就表示关联了这个类 2.何时使用关联? 长时间(需要记住)留存的需要关联:短时间的不需要.比如: 需要关联:老师教那些课 ...
- java读取本地json数组并解析
1.本地json位置 2,json数据 {"garbages":[{"id":"/m/011k07","ename":& ...
- ZJNU 1528 - War--高级
类似于1213取水 可以把空投当作第0个城市 最后将0~n的所有城市跑最小生成树 /* Written By StelaYuri */ #include<iostream> #includ ...
- Vue专题-组件
vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. Vue.js组件系统 每一个新技 ...
- 记录一次追踪@AutoWired的过程
目录 记录一次追踪@AutoWired的过程 前言 疑惑:依赖究竟是怎么自动注入的 AutoWiredAnnotationBeanPostProcessor中探究 自动注入debug流程追踪 dete ...
- 【python】两行代码实现近百年的正反日期查询--20200202
到2020年了.有个日期也火了,记得上一次还是2011年11月2日.为啥捏,因为日期写成数字形式 正反是一样的. 2020年也有一个这样的日期.20200202:2020年2月2日. 于是乎想写一段代 ...
- 通过Dockerfile 文件为linux images 添加新用户
要求: (1)增加一个新用户,名为mynewuser (2)让这个用户有root权限 (3)设置其密码为mynewpassword (4)Container启动后以mynewuser登录,并且直接到m ...
- CodeForces 993B Open Communication(STL 模拟)
https://codeforces.com/problemset/problem/993/b 这题不难,暴力就能过,主要是题意太难懂了 题意: 现在有两个人,每个人手中有一对数,第一个人手中的数是n ...