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 ...
随机推荐
- 吴裕雄--天生自然深度学习TensorBoard可视化:改造后的mnist_train
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第一天】
本人做过一年的MATLAB编程和简单维护过VB和C++的项目.是跟着网上获得的黑马的Java双元视频课来自学入门Java知识和常用框架的使用. 淘淘商城(SpringMVC+Spring+Mybati ...
- PAT Advanced 1023 Have Fun with Numbers (20) [⼤整数运算]
题目 Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, ...
- 对于 C语言的扩展和JAVA的重载理解
哎,又被学长看成笨蛋了 ,先前学习java,自己真是什么都要忘了,弄得自己连java最重要的概念--重载,都不知道是啥,还厚着脸皮和学长说 是函数名字一样 ,但是就是函数里面的参数和参数类型不一 ...
- Codeforces Round #600 (Div. 2)E F
题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...
- SQLite-外键约束/表链接查询
外键约束: 表一的某个字段关联到表二的某个字段 例子: 国家表:t_country
- linux select函数
/**两个线程一个负责监听客户端,一个负责读客户端请求. 服务器模型,*主控线程负责accept监听链接的客户端,*把客户端fd放入任务队列中(),分离子线程则从任务队列取出所有的*客户端描述加入se ...
- GIL全局解释器锁-死锁与递归锁-信号量-event事件
一.全局解释器锁GIL: 官方的解释:掌握概念为主 """ In CPython, the global interpreter lock, or GIL, is a m ...
- JSONObject和JSONArray的基本使用
一.JSONObject和JSONArray的数据表示形式 JSONObject的数据是用 { } 来表示的, 例如: { "name" : "佩奇", ...
- LeetCode No.139,140,141
No.139 WordBreak 单词拆分 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可 ...